summaryrefslogtreecommitdiffstats
path: root/binutils-2.17/ld
diff options
context:
space:
mode:
authorJing Yu <jingyu@google.com>2009-11-05 16:55:30 -0800
committerJing Yu <jingyu@google.com>2009-11-05 16:55:30 -0800
commit2cafa61b4b039e5ac3b876fc44a05c61d66df4d4 (patch)
tree1caaaacd28e00e283dbacd6726db52cbf2d5d909 /binutils-2.17/ld
parent8d401cf711539af5a2f78d12447341d774892618 (diff)
downloadtoolchain_binutils-2cafa61b4b039e5ac3b876fc44a05c61d66df4d4.tar.gz
toolchain_binutils-2cafa61b4b039e5ac3b876fc44a05c61d66df4d4.tar.bz2
toolchain_binutils-2cafa61b4b039e5ac3b876fc44a05c61d66df4d4.zip
check in binutils sources for prebuilt toolchains in Eclair.
Diffstat (limited to 'binutils-2.17/ld')
-rw-r--r--binutils-2.17/ld/ChangeLog346
-rw-r--r--binutils-2.17/ld/ChangeLog-00013376
-rw-r--r--binutils-2.17/ld/ChangeLog-02033580
-rw-r--r--binutils-2.17/ld/ChangeLog-20041442
-rw-r--r--binutils-2.17/ld/ChangeLog-20051842
-rw-r--r--binutils-2.17/ld/ChangeLog-91977601
-rw-r--r--binutils-2.17/ld/ChangeLog-98992108
-rw-r--r--binutils-2.17/ld/MAINTAINERS1
-rw-r--r--binutils-2.17/ld/Makefile.am1954
-rw-r--r--binutils-2.17/ld/Makefile.in2738
-rw-r--r--binutils-2.17/ld/NEWS372
-rw-r--r--binutils-2.17/ld/README67
-rw-r--r--binutils-2.17/ld/TODO9
-rw-r--r--binutils-2.17/ld/acinclude.m41
-rw-r--r--binutils-2.17/ld/aclocal.m4913
-rw-r--r--binutils-2.17/ld/config.in222
-rw-r--r--binutils-2.17/ld/configdoc.texi22
-rwxr-xr-xbinutils-2.17/ld/configure11274
-rw-r--r--binutils-2.17/ld/configure.host246
-rw-r--r--binutils-2.17/ld/configure.in262
-rw-r--r--binutils-2.17/ld/configure.tgt629
-rw-r--r--binutils-2.17/ld/deffile.h103
-rw-r--r--binutils-2.17/ld/deffilep.y1077
-rw-r--r--binutils-2.17/ld/dep-in.sed21
-rw-r--r--binutils-2.17/ld/elf-hints-local.h44
-rw-r--r--binutils-2.17/ld/emulparams/README2
-rw-r--r--binutils-2.17/ld/emulparams/aix5ppc.sh6
-rw-r--r--binutils-2.17/ld/emulparams/aix5rs6.sh6
-rw-r--r--binutils-2.17/ld/emulparams/aixppc.sh7
-rw-r--r--binutils-2.17/ld/emulparams/aixrs6.sh7
-rw-r--r--binutils-2.17/ld/emulparams/alpha.sh3
-rw-r--r--binutils-2.17/ld/emulparams/arcelf.sh11
-rw-r--r--binutils-2.17/ld/emulparams/arm_epoc_pe.sh10
-rw-r--r--binutils-2.17/ld/emulparams/armaoutb.sh7
-rw-r--r--binutils-2.17/ld/emulparams/armaoutl.sh7
-rw-r--r--binutils-2.17/ld/emulparams/armcoff.sh6
-rw-r--r--binutils-2.17/ld/emulparams/armelf.sh39
-rw-r--r--binutils-2.17/ld/emulparams/armelf_fbsd.sh3
-rw-r--r--binutils-2.17/ld/emulparams/armelf_linux.sh24
-rw-r--r--binutils-2.17/ld/emulparams/armelf_linux_eabi.sh9
-rw-r--r--binutils-2.17/ld/emulparams/armelf_nbsd.sh7
-rw-r--r--binutils-2.17/ld/emulparams/armelf_vxworks.sh6
-rw-r--r--binutils-2.17/ld/emulparams/armelfb.sh2
-rw-r--r--binutils-2.17/ld/emulparams/armelfb_linux.sh2
-rw-r--r--binutils-2.17/ld/emulparams/armelfb_linux_eabi.sh2
-rw-r--r--binutils-2.17/ld/emulparams/armelfb_nbsd.sh2
-rw-r--r--binutils-2.17/ld/emulparams/armnbsd.sh7
-rw-r--r--binutils-2.17/ld/emulparams/armnto.sh28
-rw-r--r--binutils-2.17/ld/emulparams/armpe.sh15
-rw-r--r--binutils-2.17/ld/emulparams/armsymbian.sh25
-rw-r--r--binutils-2.17/ld/emulparams/avr1.sh10
-rw-r--r--binutils-2.17/ld/emulparams/avr2.sh10
-rw-r--r--binutils-2.17/ld/emulparams/avr3.sh10
-rw-r--r--binutils-2.17/ld/emulparams/avr4.sh10
-rw-r--r--binutils-2.17/ld/emulparams/avr5.sh10
-rwxr-xr-xbinutils-2.17/ld/emulparams/bfin.sh14
-rw-r--r--binutils-2.17/ld/emulparams/coff_i860.sh5
-rw-r--r--binutils-2.17/ld/emulparams/coff_sparc.sh7
-rw-r--r--binutils-2.17/ld/emulparams/crisaout.sh7
-rw-r--r--binutils-2.17/ld/emulparams/criself.sh98
-rw-r--r--binutils-2.17/ld/emulparams/crislinux.sh39
-rw-r--r--binutils-2.17/ld/emulparams/d10velf.sh9
-rw-r--r--binutils-2.17/ld/emulparams/d30v_e.sh20
-rw-r--r--binutils-2.17/ld/emulparams/d30v_o.sh20
-rw-r--r--binutils-2.17/ld/emulparams/d30velf.sh20
-rw-r--r--binutils-2.17/ld/emulparams/delta68.sh5
-rw-r--r--binutils-2.17/ld/emulparams/elf32_dlx.sh9
-rw-r--r--binutils-2.17/ld/emulparams/elf32_i860.sh9
-rw-r--r--binutils-2.17/ld/emulparams/elf32_i960.sh8
-rw-r--r--binutils-2.17/ld/emulparams/elf32_sparc.sh14
-rw-r--r--binutils-2.17/ld/emulparams/elf32_sparc_vxworks.sh4
-rw-r--r--binutils-2.17/ld/emulparams/elf32am33lin.sh11
-rw-r--r--binutils-2.17/ld/emulparams/elf32b4300.sh10
-rw-r--r--binutils-2.17/ld/emulparams/elf32bfinfd.sh16
-rw-r--r--binutils-2.17/ld/emulparams/elf32bmip.sh50
-rw-r--r--binutils-2.17/ld/emulparams/elf32bmipn32-defs.sh64
-rwxr-xr-xbinutils-2.17/ld/emulparams/elf32bmipn32.sh22
-rw-r--r--binutils-2.17/ld/emulparams/elf32bsmip.sh3
-rw-r--r--binutils-2.17/ld/emulparams/elf32btsmip.sh10
-rw-r--r--binutils-2.17/ld/emulparams/elf32btsmipn32.sh15
-rw-r--r--binutils-2.17/ld/emulparams/elf32cr16c.sh5
-rw-r--r--binutils-2.17/ld/emulparams/elf32crx.sh6
-rw-r--r--binutils-2.17/ld/emulparams/elf32ebmip.sh2
-rw-r--r--binutils-2.17/ld/emulparams/elf32ebmipvxworks.sh11
-rw-r--r--binutils-2.17/ld/emulparams/elf32elmip.sh2
-rw-r--r--binutils-2.17/ld/emulparams/elf32elmipvxworks.sh11
-rwxr-xr-xbinutils-2.17/ld/emulparams/elf32fr30.sh10
-rwxr-xr-xbinutils-2.17/ld/emulparams/elf32frv.sh19
-rw-r--r--binutils-2.17/ld/emulparams/elf32frvfd.sh16
-rw-r--r--binutils-2.17/ld/emulparams/elf32i370.sh8
-rw-r--r--binutils-2.17/ld/emulparams/elf32ip2k.sh20
-rwxr-xr-xbinutils-2.17/ld/emulparams/elf32iq10.sh11
-rwxr-xr-xbinutils-2.17/ld/emulparams/elf32iq2000.sh14
-rw-r--r--binutils-2.17/ld/emulparams/elf32l4300.sh4
-rw-r--r--binutils-2.17/ld/emulparams/elf32lmip.sh7
-rw-r--r--binutils-2.17/ld/emulparams/elf32lppc.sh5
-rw-r--r--binutils-2.17/ld/emulparams/elf32lppcnto.sh5
-rw-r--r--binutils-2.17/ld/emulparams/elf32lppcsim.sh2
-rw-r--r--binutils-2.17/ld/emulparams/elf32lsmip.sh2
-rw-r--r--binutils-2.17/ld/emulparams/elf32ltsmip.sh2
-rw-r--r--binutils-2.17/ld/emulparams/elf32ltsmipn32.sh4
-rw-r--r--binutils-2.17/ld/emulparams/elf32m32c.sh26
-rw-r--r--binutils-2.17/ld/emulparams/elf32mcore.sh59
-rw-r--r--binutils-2.17/ld/emulparams/elf32mipswindiss.sh27
-rw-r--r--binutils-2.17/ld/emulparams/elf32mt.sh24
-rwxr-xr-xbinutils-2.17/ld/emulparams/elf32openrisc.sh10
-rw-r--r--binutils-2.17/ld/emulparams/elf32ppc.sh15
-rw-r--r--binutils-2.17/ld/emulparams/elf32ppc_fbsd.sh2
-rw-r--r--binutils-2.17/ld/emulparams/elf32ppccommon.sh49
-rw-r--r--binutils-2.17/ld/emulparams/elf32ppclinux.sh8
-rw-r--r--binutils-2.17/ld/emulparams/elf32ppcnto.sh4
-rw-r--r--binutils-2.17/ld/emulparams/elf32ppcsim.sh2
-rw-r--r--binutils-2.17/ld/emulparams/elf32ppcvxworks.sh3
-rw-r--r--binutils-2.17/ld/emulparams/elf32ppcwindiss.sh23
-rw-r--r--binutils-2.17/ld/emulparams/elf32vax.sh11
-rw-r--r--binutils-2.17/ld/emulparams/elf32xc16x.sh8
-rw-r--r--binutils-2.17/ld/emulparams/elf32xc16xl.sh8
-rw-r--r--binutils-2.17/ld/emulparams/elf32xc16xs.sh8
-rw-r--r--binutils-2.17/ld/emulparams/elf32xstormy16.sh13
-rw-r--r--binutils-2.17/ld/emulparams/elf32xtensa.sh35
-rw-r--r--binutils-2.17/ld/emulparams/elf64_aix.sh21
-rw-r--r--binutils-2.17/ld/emulparams/elf64_ia64.sh39
-rw-r--r--binutils-2.17/ld/emulparams/elf64_ia64_fbsd.sh6
-rw-r--r--binutils-2.17/ld/emulparams/elf64_s390.sh35
-rw-r--r--binutils-2.17/ld/emulparams/elf64_sparc.sh51
-rw-r--r--binutils-2.17/ld/emulparams/elf64_sparc_fbsd.sh2
-rw-r--r--binutils-2.17/ld/emulparams/elf64alpha.sh27
-rw-r--r--binutils-2.17/ld/emulparams/elf64alpha_fbsd.sh3
-rw-r--r--binutils-2.17/ld/emulparams/elf64alpha_nbsd.sh2
-rwxr-xr-xbinutils-2.17/ld/emulparams/elf64bmip.sh23
-rw-r--r--binutils-2.17/ld/emulparams/elf64btsmip.sh16
-rwxr-xr-xbinutils-2.17/ld/emulparams/elf64hppa.sh22
-rw-r--r--binutils-2.17/ld/emulparams/elf64lppc.sh3
-rw-r--r--binutils-2.17/ld/emulparams/elf64ltsmip.sh4
-rw-r--r--binutils-2.17/ld/emulparams/elf64mmix.sh61
-rw-r--r--binutils-2.17/ld/emulparams/elf64ppc.sh49
-rw-r--r--binutils-2.17/ld/emulparams/elf_fbsd.sh1
-rw-r--r--binutils-2.17/ld/emulparams/elf_i386.sh14
-rw-r--r--binutils-2.17/ld/emulparams/elf_i386_be.sh12
-rw-r--r--binutils-2.17/ld/emulparams/elf_i386_chaos.sh11
-rw-r--r--binutils-2.17/ld/emulparams/elf_i386_fbsd.sh3
-rw-r--r--binutils-2.17/ld/emulparams/elf_i386_ldso.sh12
-rw-r--r--binutils-2.17/ld/emulparams/elf_i386_vxworks.sh14
-rw-r--r--binutils-2.17/ld/emulparams/elf_s390.sh13
-rw-r--r--binutils-2.17/ld/emulparams/elf_x86_64.sh33
-rw-r--r--binutils-2.17/ld/emulparams/elf_x86_64_fbsd.sh2
-rw-r--r--binutils-2.17/ld/emulparams/gld960.sh7
-rw-r--r--binutils-2.17/ld/emulparams/gld960coff.sh19
-rw-r--r--binutils-2.17/ld/emulparams/h8300.sh18
-rw-r--r--binutils-2.17/ld/emulparams/h8300elf.sh25
-rw-r--r--binutils-2.17/ld/emulparams/h8300h.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8300helf.sh3
-rw-r--r--binutils-2.17/ld/emulparams/h8300hn.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8300hnelf.sh2
-rw-r--r--binutils-2.17/ld/emulparams/h8300s.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8300self.sh3
-rw-r--r--binutils-2.17/ld/emulparams/h8300sn.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8300snelf.sh2
-rw-r--r--binutils-2.17/ld/emulparams/h8300sx.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8300sxelf.sh16
-rw-r--r--binutils-2.17/ld/emulparams/h8300sxn.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8300sxnelf.sh2
-rw-r--r--binutils-2.17/ld/emulparams/h8500.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8500b.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8500c.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8500m.sh5
-rw-r--r--binutils-2.17/ld/emulparams/h8500s.sh5
-rw-r--r--binutils-2.17/ld/emulparams/hp300bsd.sh5
-rw-r--r--binutils-2.17/ld/emulparams/hp3hpux.sh8
-rw-r--r--binutils-2.17/ld/emulparams/hppa64linux.sh55
-rw-r--r--binutils-2.17/ld/emulparams/hppaelf.sh9
-rw-r--r--binutils-2.17/ld/emulparams/hppalinux.sh22
-rw-r--r--binutils-2.17/ld/emulparams/hppanbsd.sh6
-rw-r--r--binutils-2.17/ld/emulparams/hppaobsd.sh6
-rw-r--r--binutils-2.17/ld/emulparams/i386aout.sh6
-rwxr-xr-xbinutils-2.17/ld/emulparams/i386beos.sh5
-rw-r--r--binutils-2.17/ld/emulparams/i386bsd.sh6
-rw-r--r--binutils-2.17/ld/emulparams/i386coff.sh5
-rw-r--r--binutils-2.17/ld/emulparams/i386go32.sh8
-rw-r--r--binutils-2.17/ld/emulparams/i386linux.sh7
-rw-r--r--binutils-2.17/ld/emulparams/i386lynx.sh17
-rw-r--r--binutils-2.17/ld/emulparams/i386mach.sh7
-rw-r--r--binutils-2.17/ld/emulparams/i386moss.sh10
-rw-r--r--binutils-2.17/ld/emulparams/i386msdos.sh7
-rw-r--r--binutils-2.17/ld/emulparams/i386nbsd.sh6
-rw-r--r--binutils-2.17/ld/emulparams/i386nto.sh12
-rw-r--r--binutils-2.17/ld/emulparams/i386nw.sh9
-rw-r--r--binutils-2.17/ld/emulparams/i386pe.sh9
-rw-r--r--binutils-2.17/ld/emulparams/i386pe_posix.sh10
-rw-r--r--binutils-2.17/ld/emulparams/lnk960.sh6
-rw-r--r--binutils-2.17/ld/emulparams/m32relf.sh12
-rw-r--r--binutils-2.17/ld/emulparams/m32relf_linux.sh14
-rw-r--r--binutils-2.17/ld/emulparams/m32rlelf.sh2
-rw-r--r--binutils-2.17/ld/emulparams/m32rlelf_linux.sh2
-rw-r--r--binutils-2.17/ld/emulparams/m68hc11elf.sh18
-rw-r--r--binutils-2.17/ld/emulparams/m68hc11elfb.sh12
-rw-r--r--binutils-2.17/ld/emulparams/m68hc12elf.sh18
-rw-r--r--binutils-2.17/ld/emulparams/m68hc12elfb.sh12
-rw-r--r--binutils-2.17/ld/emulparams/m68k4knbsd.sh7
-rw-r--r--binutils-2.17/ld/emulparams/m68kaout.sh7
-rw-r--r--binutils-2.17/ld/emulparams/m68kaux.sh8
-rw-r--r--binutils-2.17/ld/emulparams/m68kcoff.sh6
-rw-r--r--binutils-2.17/ld/emulparams/m68kelf.sh12
-rw-r--r--binutils-2.17/ld/emulparams/m68kelfnbsd.sh4
-rw-r--r--binutils-2.17/ld/emulparams/m68klinux.sh7
-rw-r--r--binutils-2.17/ld/emulparams/m68knbsd.sh7
-rw-r--r--binutils-2.17/ld/emulparams/m68kpsos.sh6
-rw-r--r--binutils-2.17/ld/emulparams/m88kbcs.sh5
-rw-r--r--binutils-2.17/ld/emulparams/maxqcoff.sh7
-rw-r--r--binutils-2.17/ld/emulparams/mcorepe.sh10
-rw-r--r--binutils-2.17/ld/emulparams/mipsbig.sh6
-rw-r--r--binutils-2.17/ld/emulparams/mipsbsd.sh7
-rw-r--r--binutils-2.17/ld/emulparams/mipsidt.sh12
-rw-r--r--binutils-2.17/ld/emulparams/mipsidtl.sh12
-rw-r--r--binutils-2.17/ld/emulparams/mipslit.sh6
-rw-r--r--binutils-2.17/ld/emulparams/mipslnews.sh9
-rw-r--r--binutils-2.17/ld/emulparams/mipspe.sh10
-rw-r--r--binutils-2.17/ld/emulparams/mmo.sh10
-rw-r--r--binutils-2.17/ld/emulparams/mn10200.sh21
-rw-r--r--binutils-2.17/ld/emulparams/mn10300.sh5
-rw-r--r--binutils-2.17/ld/emulparams/msp430all.sh1008
-rw-r--r--binutils-2.17/ld/emulparams/news.sh5
-rw-r--r--binutils-2.17/ld/emulparams/ns32knbsd.sh8
-rw-r--r--binutils-2.17/ld/emulparams/or32.sh6
-rw-r--r--binutils-2.17/ld/emulparams/or32elf.sh6
-rw-r--r--binutils-2.17/ld/emulparams/pc532macha.sh6
-rw-r--r--binutils-2.17/ld/emulparams/pdp11.sh5
-rw-r--r--binutils-2.17/ld/emulparams/pjelf.sh5
-rw-r--r--binutils-2.17/ld/emulparams/pjlelf.sh5
-rw-r--r--binutils-2.17/ld/emulparams/ppclynx.sh20
-rw-r--r--binutils-2.17/ld/emulparams/ppcmacos.sh6
-rw-r--r--binutils-2.17/ld/emulparams/ppcnw.sh7
-rw-r--r--binutils-2.17/ld/emulparams/ppcpe.sh8
-rw-r--r--binutils-2.17/ld/emulparams/riscix.sh5
-rw-r--r--binutils-2.17/ld/emulparams/sh.sh8
-rw-r--r--binutils-2.17/ld/emulparams/shelf.sh33
-rw-r--r--binutils-2.17/ld/emulparams/shelf32.sh58
-rw-r--r--binutils-2.17/ld/emulparams/shelf32_linux.sh2
-rw-r--r--binutils-2.17/ld/emulparams/shelf32_nbsd.sh17
-rw-r--r--binutils-2.17/ld/emulparams/shelf64.sh18
-rw-r--r--binutils-2.17/ld/emulparams/shelf64_nbsd.sh8
-rw-r--r--binutils-2.17/ld/emulparams/shelf_linux.sh2
-rw-r--r--binutils-2.17/ld/emulparams/shelf_nbsd.sh15
-rw-r--r--binutils-2.17/ld/emulparams/shelf_nto.sh10
-rw-r--r--binutils-2.17/ld/emulparams/shl.sh2
-rw-r--r--binutils-2.17/ld/emulparams/shlelf.sh2
-rw-r--r--binutils-2.17/ld/emulparams/shlelf32.sh2
-rw-r--r--binutils-2.17/ld/emulparams/shlelf32_linux.sh43
-rw-r--r--binutils-2.17/ld/emulparams/shlelf32_nbsd.sh3
-rw-r--r--binutils-2.17/ld/emulparams/shlelf64.sh2
-rw-r--r--binutils-2.17/ld/emulparams/shlelf64_nbsd.sh3
-rw-r--r--binutils-2.17/ld/emulparams/shlelf_linux.sh18
-rw-r--r--binutils-2.17/ld/emulparams/shlelf_nbsd.sh3
-rw-r--r--binutils-2.17/ld/emulparams/shlelf_nto.sh10
-rw-r--r--binutils-2.17/ld/emulparams/shlsymbian.sh17
-rw-r--r--binutils-2.17/ld/emulparams/shpe.sh10
-rw-r--r--binutils-2.17/ld/emulparams/sparcaout.sh8
-rw-r--r--binutils-2.17/ld/emulparams/sparclinux.sh7
-rw-r--r--binutils-2.17/ld/emulparams/sparcnbsd.sh5
-rw-r--r--binutils-2.17/ld/emulparams/st2000.sh5
-rw-r--r--binutils-2.17/ld/emulparams/sun3.sh8
-rw-r--r--binutils-2.17/ld/emulparams/sun4.sh8
-rw-r--r--binutils-2.17/ld/emulparams/tic30aout.sh7
-rw-r--r--binutils-2.17/ld/emulparams/tic30coff.sh7
-rw-r--r--binutils-2.17/ld/emulparams/tic3xcoff.sh6
-rw-r--r--binutils-2.17/ld/emulparams/tic3xcoff_onchip.sh8
-rw-r--r--binutils-2.17/ld/emulparams/tic4xcoff.sh6
-rw-r--r--binutils-2.17/ld/emulparams/tic54xcoff.sh8
-rw-r--r--binutils-2.17/ld/emulparams/tic80coff.sh56
-rw-r--r--binutils-2.17/ld/emulparams/v850.sh15
-rw-r--r--binutils-2.17/ld/emulparams/vanilla.sh5
-rw-r--r--binutils-2.17/ld/emulparams/vax.sh5
-rw-r--r--binutils-2.17/ld/emulparams/vaxnbsd.sh7
-rw-r--r--binutils-2.17/ld/emulparams/vsta.sh8
-rw-r--r--binutils-2.17/ld/emulparams/vxworks.sh28
-rw-r--r--binutils-2.17/ld/emulparams/w65.sh5
-rw-r--r--binutils-2.17/ld/emulparams/xtensa-config.sh3
-rw-r--r--binutils-2.17/ld/emulparams/z80.sh6
-rw-r--r--binutils-2.17/ld/emulparams/z8001.sh7
-rw-r--r--binutils-2.17/ld/emulparams/z8002.sh6
-rw-r--r--binutils-2.17/ld/emultempl/README3
-rw-r--r--binutils-2.17/ld/emultempl/aix.em1359
-rw-r--r--binutils-2.17/ld/emultempl/alphaelf.em153
-rw-r--r--binutils-2.17/ld/emultempl/armcoff.em281
-rw-r--r--binutils-2.17/ld/emultempl/armelf.em301
-rw-r--r--binutils-2.17/ld/emultempl/astring.sed13
-rw-r--r--binutils-2.17/ld/emultempl/beos.em786
-rw-r--r--binutils-2.17/ld/emultempl/crxelf.em94
-rw-r--r--binutils-2.17/ld/emultempl/elf32.em1971
-rw-r--r--binutils-2.17/ld/emultempl/generic.em148
-rw-r--r--binutils-2.17/ld/emultempl/gld960.em154
-rw-r--r--binutils-2.17/ld/emultempl/gld960c.em169
-rw-r--r--binutils-2.17/ld/emultempl/hppaelf.em385
-rw-r--r--binutils-2.17/ld/emultempl/ia64elf.em62
-rw-r--r--binutils-2.17/ld/emultempl/irix.em41
-rw-r--r--binutils-2.17/ld/emultempl/linux.em209
-rw-r--r--binutils-2.17/ld/emultempl/lnk960.em289
-rw-r--r--binutils-2.17/ld/emultempl/m68hc1xelf.em375
-rw-r--r--binutils-2.17/ld/emultempl/m68kcoff.em242
-rw-r--r--binutils-2.17/ld/emultempl/m68kelf.em188
-rw-r--r--binutils-2.17/ld/emultempl/mipsecoff.em37
-rw-r--r--binutils-2.17/ld/emultempl/mmix-elfnmmo.em111
-rw-r--r--binutils-2.17/ld/emultempl/mmixelf.em44
-rw-r--r--binutils-2.17/ld/emultempl/mmo.em147
-rw-r--r--binutils-2.17/ld/emultempl/needrelax.em38
-rw-r--r--binutils-2.17/ld/emultempl/netbsd.em13
-rw-r--r--binutils-2.17/ld/emultempl/ostring.sed4
-rw-r--r--binutils-2.17/ld/emultempl/pe.em1845
-rw-r--r--binutils-2.17/ld/emultempl/ppc32elf.em174
-rw-r--r--binutils-2.17/ld/emultempl/ppc64elf.em579
-rw-r--r--binutils-2.17/ld/emultempl/sh64elf.em561
-rw-r--r--binutils-2.17/ld/emultempl/sunos.em1033
-rw-r--r--binutils-2.17/ld/emultempl/ticoff.em182
-rw-r--r--binutils-2.17/ld/emultempl/vanilla.em85
-rw-r--r--binutils-2.17/ld/emultempl/vxworks.em49
-rw-r--r--binutils-2.17/ld/emultempl/xtensaelf.em1864
-rw-r--r--binutils-2.17/ld/emultempl/z80.em85
-rw-r--r--binutils-2.17/ld/fdl.texi367
-rw-r--r--binutils-2.17/ld/gen-doc.texi22
-rwxr-xr-xbinutils-2.17/ld/genscripts.sh371
-rw-r--r--binutils-2.17/ld/h8-doc.texi14
-rw-r--r--binutils-2.17/ld/ld.12071
-rw-r--r--binutils-2.17/ld/ld.h297
-rw-r--r--binutils-2.17/ld/ld.info6691
-rw-r--r--binutils-2.17/ld/ld.texinfo6654
-rw-r--r--binutils-2.17/ld/ldcref.c598
-rw-r--r--binutils-2.17/ld/ldctor.c376
-rw-r--r--binutils-2.17/ld/ldctor.h60
-rw-r--r--binutils-2.17/ld/ldemul.c323
-rw-r--r--binutils-2.17/ld/ldemul.h204
-rw-r--r--binutils-2.17/ld/ldexp.c1095
-rw-r--r--binutils-2.17/ld/ldexp.h183
-rw-r--r--binutils-2.17/ld/ldfile.c547
-rw-r--r--binutils-2.17/ld/ldfile.h63
-rw-r--r--binutils-2.17/ld/ldgram.c4163
-rw-r--r--binutils-2.17/ld/ldgram.h307
-rw-r--r--binutils-2.17/ld/ldgram.y1302
-rw-r--r--binutils-2.17/ld/ldint.texinfo1058
-rw-r--r--binutils-2.17/ld/ldlang.c6775
-rw-r--r--binutils-2.17/ld/ldlang.h608
-rw-r--r--binutils-2.17/ld/ldlex.c3833
-rw-r--r--binutils-2.17/ld/ldlex.h63
-rw-r--r--binutils-2.17/ld/ldlex.l682
-rw-r--r--binutils-2.17/ld/ldmain.c1528
-rw-r--r--binutils-2.17/ld/ldmain.h47
-rw-r--r--binutils-2.17/ld/ldmisc.c560
-rw-r--r--binutils-2.17/ld/ldmisc.h45
-rw-r--r--binutils-2.17/ld/ldver.c59
-rw-r--r--binutils-2.17/ld/ldver.h21
-rw-r--r--binutils-2.17/ld/ldver.texi1
-rw-r--r--binutils-2.17/ld/ldwrite.c568
-rw-r--r--binutils-2.17/ld/ldwrite.h21
-rw-r--r--binutils-2.17/ld/lexsup.c1553
-rw-r--r--binutils-2.17/ld/mri.c316
-rw-r--r--binutils-2.17/ld/mri.h37
-rw-r--r--binutils-2.17/ld/pe-dll.c2727
-rw-r--r--binutils-2.17/ld/pe-dll.h62
-rw-r--r--binutils-2.17/ld/po/Make-in255
-rw-r--r--binutils-2.17/ld/po/POTFILES.in30
-rw-r--r--binutils-2.17/ld/po/da.gmobin0 -> 40607 bytes
-rw-r--r--binutils-2.17/ld/po/da.po1702
-rw-r--r--binutils-2.17/ld/po/es.gmobin0 -> 48316 bytes
-rw-r--r--binutils-2.17/ld/po/es.po2004
-rw-r--r--binutils-2.17/ld/po/fr.gmobin0 -> 49474 bytes
-rw-r--r--binutils-2.17/ld/po/fr.po1987
-rw-r--r--binutils-2.17/ld/po/ld.pot1916
-rw-r--r--binutils-2.17/ld/po/sv.gmobin0 -> 43131 bytes
-rw-r--r--binutils-2.17/ld/po/sv.po1815
-rw-r--r--binutils-2.17/ld/po/tr.gmobin0 -> 41339 bytes
-rw-r--r--binutils-2.17/ld/po/tr.po2001
-rw-r--r--binutils-2.17/ld/po/vi.gmobin0 -> 53249 bytes
-rw-r--r--binutils-2.17/ld/po/vi.po1958
-rw-r--r--binutils-2.17/ld/po/zh_CN.gmobin0 -> 24796 bytes
-rw-r--r--binutils-2.17/ld/po/zh_CN.po1942
-rw-r--r--binutils-2.17/ld/scripttempl/README4
-rw-r--r--binutils-2.17/ld/scripttempl/a29k.sc37
-rw-r--r--binutils-2.17/ld/scripttempl/aix.sc62
-rw-r--r--binutils-2.17/ld/scripttempl/alpha.sc74
-rw-r--r--binutils-2.17/ld/scripttempl/aout.sc57
-rw-r--r--binutils-2.17/ld/scripttempl/armaout.sc35
-rw-r--r--binutils-2.17/ld/scripttempl/armbpabi.sc428
-rw-r--r--binutils-2.17/ld/scripttempl/armcoff.sc84
-rw-r--r--binutils-2.17/ld/scripttempl/avr.sc224
-rw-r--r--binutils-2.17/ld/scripttempl/crisaout.sc131
-rw-r--r--binutils-2.17/ld/scripttempl/delta68.sc49
-rw-r--r--binutils-2.17/ld/scripttempl/dlx.sc30
-rw-r--r--binutils-2.17/ld/scripttempl/ebmon29k.sc27
-rw-r--r--binutils-2.17/ld/scripttempl/elf.sc507
-rw-r--r--binutils-2.17/ld/scripttempl/elf32cr16c.sc52
-rw-r--r--binutils-2.17/ld/scripttempl/elf32crx.sc175
-rw-r--r--binutils-2.17/ld/scripttempl/elf32msp430.sc249
-rw-r--r--binutils-2.17/ld/scripttempl/elf32msp430_3.sc192
-rw-r--r--binutils-2.17/ld/scripttempl/elf32sh-symbian.sc380
-rw-r--r--binutils-2.17/ld/scripttempl/elf32xc16x.sc61
-rw-r--r--binutils-2.17/ld/scripttempl/elf32xc16xl.sc64
-rw-r--r--binutils-2.17/ld/scripttempl/elf32xc16xs.sc64
-rw-r--r--binutils-2.17/ld/scripttempl/elf_chaos.sc353
-rw-r--r--binutils-2.17/ld/scripttempl/elfd10v.sc196
-rw-r--r--binutils-2.17/ld/scripttempl/elfd30v.sc223
-rw-r--r--binutils-2.17/ld/scripttempl/elfi370.sc217
-rw-r--r--binutils-2.17/ld/scripttempl/elfm68hc11.sc460
-rw-r--r--binutils-2.17/ld/scripttempl/elfm68hc12.sc463
-rw-r--r--binutils-2.17/ld/scripttempl/elfxtensa.sc476
-rw-r--r--binutils-2.17/ld/scripttempl/epocpe.sc151
-rw-r--r--binutils-2.17/ld/scripttempl/h8300.sc94
-rw-r--r--binutils-2.17/ld/scripttempl/h8300h.sc97
-rw-r--r--binutils-2.17/ld/scripttempl/h8300hn.sc87
-rw-r--r--binutils-2.17/ld/scripttempl/h8300s.sc97
-rw-r--r--binutils-2.17/ld/scripttempl/h8300sn.sc87
-rw-r--r--binutils-2.17/ld/scripttempl/h8300sx.sc97
-rw-r--r--binutils-2.17/ld/scripttempl/h8300sxn.sc87
-rw-r--r--binutils-2.17/ld/scripttempl/h8500.sc61
-rw-r--r--binutils-2.17/ld/scripttempl/h8500b.sc61
-rw-r--r--binutils-2.17/ld/scripttempl/h8500c.sc61
-rw-r--r--binutils-2.17/ld/scripttempl/h8500m.sc61
-rw-r--r--binutils-2.17/ld/scripttempl/h8500s.sc61
-rw-r--r--binutils-2.17/ld/scripttempl/hppaelf.sc38
-rw-r--r--binutils-2.17/ld/scripttempl/i386beos.sc194
-rw-r--r--binutils-2.17/ld/scripttempl/i386coff.sc43
-rw-r--r--binutils-2.17/ld/scripttempl/i386go32.sc79
-rw-r--r--binutils-2.17/ld/scripttempl/i386msdos.sc38
-rw-r--r--binutils-2.17/ld/scripttempl/i860coff.sc42
-rw-r--r--binutils-2.17/ld/scripttempl/i960.sc25
-rw-r--r--binutils-2.17/ld/scripttempl/ip2k.sc150
-rw-r--r--binutils-2.17/ld/scripttempl/iq2000.sc442
-rw-r--r--binutils-2.17/ld/scripttempl/m68kaux.sc46
-rw-r--r--binutils-2.17/ld/scripttempl/m68kcoff.sc42
-rw-r--r--binutils-2.17/ld/scripttempl/m68klynx.sc46
-rw-r--r--binutils-2.17/ld/scripttempl/m88kbcs.sc49
-rw-r--r--binutils-2.17/ld/scripttempl/maxqcoff.sc43
-rw-r--r--binutils-2.17/ld/scripttempl/mcorepe.sc162
-rw-r--r--binutils-2.17/ld/scripttempl/mips.sc69
-rw-r--r--binutils-2.17/ld/scripttempl/mipsbsd.sc30
-rw-r--r--binutils-2.17/ld/scripttempl/mmo.sc131
-rw-r--r--binutils-2.17/ld/scripttempl/nw.sc130
-rw-r--r--binutils-2.17/ld/scripttempl/or32.sc37
-rw-r--r--binutils-2.17/ld/scripttempl/pe.sc272
-rw-r--r--binutils-2.17/ld/scripttempl/pj.sc55
-rw-r--r--binutils-2.17/ld/scripttempl/ppcpe.sc198
-rw-r--r--binutils-2.17/ld/scripttempl/psos.sc61
-rw-r--r--binutils-2.17/ld/scripttempl/riscix.sc35
-rw-r--r--binutils-2.17/ld/scripttempl/sa29200.sc44
-rw-r--r--binutils-2.17/ld/scripttempl/sh.sc64
-rw-r--r--binutils-2.17/ld/scripttempl/sparccoff.sc48
-rw-r--r--binutils-2.17/ld/scripttempl/sparclynx.sc47
-rw-r--r--binutils-2.17/ld/scripttempl/st2000.sc26
-rw-r--r--binutils-2.17/ld/scripttempl/tic30aout.sc34
-rw-r--r--binutils-2.17/ld/scripttempl/tic30coff.sc58
-rw-r--r--binutils-2.17/ld/scripttempl/tic4xcoff.sc151
-rw-r--r--binutils-2.17/ld/scripttempl/tic54xcoff.sc52
-rw-r--r--binutils-2.17/ld/scripttempl/tic80coff.sc74
-rw-r--r--binutils-2.17/ld/scripttempl/v850.sc231
-rw-r--r--binutils-2.17/ld/scripttempl/vanilla.sc1
-rw-r--r--binutils-2.17/ld/scripttempl/w65.sc65
-rw-r--r--binutils-2.17/ld/scripttempl/xstormy16.sc239
-rw-r--r--binutils-2.17/ld/scripttempl/z80.sc35
-rw-r--r--binutils-2.17/ld/scripttempl/z8000.sc57
-rw-r--r--binutils-2.17/ld/stamp-h.in1
-rw-r--r--binutils-2.17/ld/sysdep.h96
-rw-r--r--binutils-2.17/ld/testsuite/ChangeLog370
-rw-r--r--binutils-2.17/ld/testsuite/ChangeLog-20041085
-rw-r--r--binutils-2.17/ld/testsuite/ChangeLog-20051189
-rw-r--r--binutils-2.17/ld/testsuite/ChangeLog-93033376
-rw-r--r--binutils-2.17/ld/testsuite/config/default.exp269
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/align.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/alpha.exp61
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsbin.dd62
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsbin.rd136
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsbin.s46
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsbin.sd17
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsbin.td17
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsbinpic.s74
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsbinr.dd62
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsbinr.rd131
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsbinr.sd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsg.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlsg.sd10
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlslib.s19
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlspic.dd56
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlspic.rd135
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlspic.sd17
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlspic.td17
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlspic1.s87
-rw-r--r--binutils-2.17/ld/testsuite/ld-alpha/tlspic2.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-app-abs32.d29
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-app-abs32.r8
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-app-abs32.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-app.d35
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-app.r9
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-app.s23
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-call.d58
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-call1.s30
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-call2.s24
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-dyn.ld199
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-elf.exp127
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-lib-plt32.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-lib-plt32.r8
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-lib-plt32.s17
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-lib.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-lib.ld192
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-lib.r8
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-lib.s24
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-rel31.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-rel31.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-static-app.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-static-app.r3
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-static-app.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-target1-abs.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-target1-rel.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-target1.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-target2-abs.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-target2-got-rel.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-target2-rel.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm-target2.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/arm.ld18
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/mixed-app-v5.d56
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/mixed-app.d57
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/mixed-app.r10
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/mixed-app.s39
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/mixed-app.sym18
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/mixed-lib.d38
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/mixed-lib.r8
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/mixed-lib.s28
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/mixed-lib.sym18
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/thumb-entry.d3
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/thumb-entry.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/thumb-rel32.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/thumb-rel32.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/tls-app.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/tls-app.r10
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/tls-app.s34
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/tls-lib.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/tls-lib.r10
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/tls-lib.s22
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.dd41
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.nd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.rd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.s36
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks1-static.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks1.dd37
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks1.ld30
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks1.rd19
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks1.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks2-static.sd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks2.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-arm/vxworks2.sd13
-rw-r--r--binutils-2.17/ld/testsuite/ld-auto-import/auto-import.exp160
-rw-r--r--binutils-2.17/ld/testsuite/ld-auto-import/client.c55
-rw-r--r--binutils-2.17/ld/testsuite/ld-auto-import/dll.c20
-rw-r--r--binutils-2.17/ld/testsuite/ld-bootstrap/bootstrap.exp174
-rw-r--r--binutils-2.17/ld/testsuite/ld-cdtest/cdtest-bar.cc17
-rw-r--r--binutils-2.17/ld/testsuite/ld-cdtest/cdtest-foo.cc89
-rw-r--r--binutils-2.17/ld/testsuite/ld-cdtest/cdtest-foo.h24
-rw-r--r--binutils-2.17/ld/testsuite/ld-cdtest/cdtest-main.cc40
-rw-r--r--binutils-2.17/ld/testsuite/ld-cdtest/cdtest-nrv.dat13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cdtest/cdtest.dat15
-rw-r--r--binutils-2.17/ld/testsuite/ld-cdtest/cdtest.exp124
-rw-r--r--binutils-2.17/ld/testsuite/ld-checks/asm.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-checks/checks.exp80
-rw-r--r--binutils-2.17/ld/testsuite/ld-checks/script6
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/badgotr1.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/comref1.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/cris.exp55
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/def2.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/def3.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/dso-1.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/dso-2.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/dso-3.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/dsofnf.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/dsofnf2.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/dsov32-1.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/dsov32-2.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/dsov32-3.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/dsov32-4.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/euwref1.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/expdref1.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/expdyn1.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/expdyn1.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/expdyn2.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/expdyn3.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/expdyn4.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/expdyn5.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/expdyn6.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/expdyn7.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/globsym1ref.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/globsymw1.s15
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/globsymw2.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/gotplt1.d48
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/gotplt2.d37
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/gotplt3.d35
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/gotrel1.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/gotrel2.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/hiddef1.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/hiddef1.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/hide11
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/hidrefgotplt1.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/ldsym1.d20
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/libdso-1.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/libdso-10.d37
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/libdso-11.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/libdso-12.d51
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/libdso-13.d30
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/libdso-14.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/libdso-2.d61
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/libdso-3.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/libdso-4.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/locref1.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/locref1.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/locref2.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/locref2.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/move-1.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/nodyn4.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/nodyn5.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/noglob1.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/noglob1.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/noov.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/noov.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/pv32-1.d40
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/pv32.s24
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/stabs1.s26
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/start1.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/undef1.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/undef2.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/undef3.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/v10-v32.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/v10-va.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/v32-ba-1.d20
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/v32-ba-1.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/v32-bin-1.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/v32-bin-1.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/v32-v10.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/v32-va.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/va-v10.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/va-v32.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/warn1.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/warn2.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/warn3.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/warn4.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/weakref1.d17
-rw-r--r--binutils-2.17/ld/testsuite/ld-cris/weakref2.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/crx.exp32
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/crx.ld84
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-abs32.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-abs32.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-imm16.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-imm16.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-imm32.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-imm32.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-num16.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-num16.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-num32.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-num32.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-num8.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-num8.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-regrel12.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-regrel12.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-regrel22.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-regrel22.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-regrel28.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-regrel28.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-regrel32.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-regrel32.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel16.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel16.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel24.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel24.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel32.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel32.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel4.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel4.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel8-cmp.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel8-cmp.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel8.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-crx/reloc-rel8.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-cygwin/exe-export.exp151
-rw-r--r--binutils-2.17/ld/testsuite/ld-cygwin/testdll.c14
-rw-r--r--binutils-2.17/ld/testsuite/ld-cygwin/testdll.def4
-rw-r--r--binutils-2.17/ld/testsuite/ld-cygwin/testexe.c16
-rw-r--r--binutils-2.17/ld/testsuite/ld-cygwin/testexe.def5
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/d10v.exp250
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/default_layout.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/linktest-001.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/linktest-002.lt2
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/linktest-002.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/regression-001.lt3
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/regression-001.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-001.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-001.ld10
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-001.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-002.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-002.ld10
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-003.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-003.ld10
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-004.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-004.ld10
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-005.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-005.ld10
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-005.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-006.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-006.ld8
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-007.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-007.ld8
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-008.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-008.ld8
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-009.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-009.ld11
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-009.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-010.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-010.ld11
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-011.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-011.ld11
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-012.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-012.ld11
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-013.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-013.ld12
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-014.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-014.ld12
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-015.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-015.ld12
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-016.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/reloc-016.ld12
-rw-r--r--binutils-2.17/ld/testsuite/ld-d10v/simple.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-discard/discard.exp47
-rw-r--r--binutils-2.17/ld/testsuite/ld-discard/discard.ld9
-rw-r--r--binutils-2.17/ld/testsuite/ld-discard/exit.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-discard/extern.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-discard/extern.s13
-rw-r--r--binutils-2.17/ld/testsuite/ld-discard/start.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-discard/start.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-discard/static.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-discard/static.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/eh1.d33
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/eh1.s47
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/eh1a.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/eh2.d33
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/eh2a.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/eh3.d33
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/eh3.s48
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/eh3a.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/elf.exp49
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/empty.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/empty.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/empty2.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/empty2.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/exclude.exp137
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/exclude1.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/exclude2.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/fini.c34
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/fini.out3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/frame.exp79
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/frame.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/group.ld5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/group1.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/group1a.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/group1b.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/group2.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/init.c34
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/init.out3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/merge.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/merge.ld7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/merge.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/merge2.d17
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/merge2.s58
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/orphan.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/orphan.ld8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/orphan.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/orphan2.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/orphan2.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/preinit.c34
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/preinit.out3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/sec64k.exp153
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/start.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/symbol1ref.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/symbol1w.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/table.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/tbss.s15
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/unknown.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/unknown2.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/unknown2.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-elf/warn1.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfcomm/common1a.c2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfcomm/common1b.c3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfcomm/elfcomm.exp103
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers.exp1001
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers1.c101
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers1.dsym9
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers1.map13
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers1.sym4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers1.ver8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers13.asym10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers15.c36
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers15.dsym5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers15.sym3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers15.ver5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers16.c10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers16.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers16.map3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers16a.c8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers16a.dsym3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers16a.ver3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers17.c5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers17.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers17.map4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers17.ver3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers18.c42
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers18.dsym7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers18.map12
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers18.sym4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers18.ver7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers19.c10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers19.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers19.ver3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers2.c13
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers2.dsym3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers2.map4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers2.ver8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers20.c1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers20.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers20.map7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers20.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers20a.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers21.c32
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers21.dsym4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers21.map8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers21.sym3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers21.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22.map4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22a.c6
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22a.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22a.sym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22a.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22b.c4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22b.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers22b.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23.c10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23a.c11
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23a.dsym3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23a.map5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23a.sym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23a.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23b.c4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23b.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23b.map4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23b.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23c.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers23d.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers24.map4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers24.rd15
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers24a.c5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers24b.c5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers24c.c9
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers25a.c1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers25a.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers25a.map5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers25a.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers25b.c1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers25b.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers25b.ver1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers26a.c4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers26a.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers26a.map5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers26a.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers26b.c10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers26b.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers26b.ver1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27a.c1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27a.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27a.map5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27a.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27b.c2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27b.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27b.ver1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27c.c1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27c.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27c.ver1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27d.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27d.sym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27d.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27d1.c6
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27d2.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27d3.c21
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27d4.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers27d4.ver3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28a.c1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28a.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28a.ver1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28b.c3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28b.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28b.map5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28b.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28c.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28c.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers28c.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers29.c5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers29.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers29.ver3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers3.c13
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers3.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers3.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers30.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers30.dsym5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers30.map6
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers30.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers31.c6
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers31.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers31.map5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers31.ver3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers4.c31
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers4.sym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers4a.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers4a.sym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers4a.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers5.c51
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers6.c25
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers6.dsym4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers6.sym4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers6.ver6
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers7.c13
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers7.map6
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers7a.c18
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers7a.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers7a.sym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers7a.ver4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers8.c5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers8.map15
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers8.ver8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers9.c47
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers9.dsym4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers9.sym4
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvers/vers9.ver5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/common.c14
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/define.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/elf-offset.ld173
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/elfvsb.dat26
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/elfvsb.exp472
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/hidden0.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/hidden1.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.ld7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/internal0.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/internal1.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/main.c306
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/protected0.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/protected1.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/sh1.c407
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/sh2.c46
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/sh3.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/test.c26
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfvsb/undef.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/bar.c16
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/bar1a.c26
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/bar1b.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/bar1c.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/dso.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/dsodata.dsym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/dsow.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/dsowdata.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/elfweak.exp498
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/foo.c8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/foo1a.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/foo1b.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/main.c19
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/main1.c11
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/size.dat3
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/size2.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/size2a.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/size2b.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/size_bar.c11
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/size_foo.c9
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/size_main.c8
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/strong.dat1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/strong.sym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/strongcomm.sym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/strongdata.dat1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/strongdata.sym2
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/weak.dat1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/weak.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/weakdata.dat1
-rw-r--r--binutils-2.17/ld/testsuite/ld-elfweak/weakdata.dsym1
-rw-r--r--binutils-2.17/ld/testsuite/ld-fastcall/export.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-fastcall/fastcall.exp48
-rw-r--r--binutils-2.17/ld/testsuite/ld-fastcall/import.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-1.d57
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-2.d71
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-5.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-6-fail.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-6.d73
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-7.d57
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-8.d71
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-1.d57
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-2-fail.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-2.d80
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-3.d83
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-4.d71
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-5.d82
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-6-fail.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-6.d73
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-7.d57
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-8-fail.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-8.d83
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-local-2.d83
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-local-8.d83
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-static-1.d62
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-static-2.d94
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-static-5.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-static-6.d43
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-static-7.d62
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic-static-8.d94
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic.exp66
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic1.s64
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic2.ldv1
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic2.s81
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic2min.ldv1
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic3.s99
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic4.s99
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic5.s38
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic6.ldv1
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic6.s55
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic7.s63
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic8.ldv1
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic8.s81
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fdpic8min.ldv1
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fr450-link.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fr450-linka.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fr450-linkb.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/fr450-linkc.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/frv-elf.exp3
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-1-dep.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-1-shared.lds3
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-1.s85
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-2.s183
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-3.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-dynamic-1.d71
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-dynamic-2.d200
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-dynamic-3.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-initial-shared-2.d235
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-pie-1.d71
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-pie-3.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-dynamic-1.d67
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-dynamic-2.d149
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-dynamic-3.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d214
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-pie-1.d67
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-pie-3.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-shared-1.d73
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-shared-2.d264
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-shared-3.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-static-1.d62
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-relax-static-3.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-shared-1-fail.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-shared-1.d73
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-shared-2.d264
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-shared-3.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-static-1.d70
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls-static-3.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-frv/tls.exp62
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/gcsection.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/gcsection.s43
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/h8300.exp41
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-2.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-2.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-3-coff.d36
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-3.d35
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-3.s32
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-4-coff.d76
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-4.d51
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-4.s72
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-5-coff.d50
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-5.d50
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-5.s66
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-6-coff.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-6.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax-6.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-h8300/relax.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/abs.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/abs.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/combreloc.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/combreloc.s22
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/emit-relocs.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/emit-relocs.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/i386.exp115
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/pcrel16.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/pcrel16.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/pcrel8.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/pcrel8.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/reloc.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/reloc.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbin.dd456
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbin.rd163
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbin.s165
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbin.sd13
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbin.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.dd463
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.rd154
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.s167
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.sd13
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsbinpic.s167
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsdesc.dd399
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsdesc.rd155
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsdesc.s276
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsdesc.sd20
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsdesc.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsg.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsg.sd10
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsgdesc.dd158
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsgdesc.rd107
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsgdesc.s100
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsindntpoff.dd16
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsindntpoff.s19
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlslib.s17
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsnopic.dd161
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsnopic.rd121
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsnopic.sd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsnopic1.s107
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlsnopic2.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlspic.dd411
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlspic.rd160
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlspic.sd18
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlspic.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlspic1.s282
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/tlspic2.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.dd41
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.nd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.rd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.s31
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks1-static.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks1.dd38
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks1.ld30
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks1.rd20
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks1.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks2-static.sd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks2.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/vxworks2.sd13
-rw-r--r--binutils-2.17/ld/testsuite/ld-i386/zero.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/ia64.exp61
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/link-order.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlsbin.dd74
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlsbin.rd139
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlsbin.s54
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlsbin.sd15
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlsbin.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlsbinpic.s97
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlsg.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlsg.sd10
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlslib.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlspic.dd64
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlspic.rd139
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlspic.sd15
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlspic.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlspic1.s114
-rw-r--r--binutils-2.17/ld/testsuite/ld-ia64/tlspic2.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-linkonce/linkonce.exp43
-rw-r--r--binutils-2.17/ld/testsuite/ld-linkonce/x.s26
-rw-r--r--binutils-2.17/ld/testsuite/ld-linkonce/y.s33
-rw-r--r--binutils-2.17/ld/testsuite/ld-linkonce/zeroeh.ld4
-rw-r--r--binutils-2.17/ld/testsuite/ld-linkonce/zeroehl32.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/adj-brset.d32
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/adj-brset.s51
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/adj-jump.d60
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/adj-jump.s74
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/bug-1403.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/bug-1403.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/bug-1417.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/bug-1417.s21
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/bug-3331.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/bug-3331.s23
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/far-hc11.d73
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/far-hc11.s105
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/far-hc12.d55
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/far-hc12.ld18
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/far-hc12.s83
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/link-hc12.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/link-hcs12.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/link-hcs12.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/m68hc11.exp31
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/relax-direct.d63
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/relax-direct.s84
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/relax-group.d63
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68hc11/relax-group.s161
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isaa-mac.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isaa-mac.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isaa-nodiv.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isaa.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isaa.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isaaplus.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isaaplus.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isab-float.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isab-float.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isab-nousp.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isab.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/isab.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/m68k.exp55
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge-error-1a.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge-error-1a.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge-error-1b.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge-error-1b.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge-error-1c.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge-error-1d.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge-error-1e.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge-ok-1a.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge-ok-1b.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-m68k/merge.ld9
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/addend.dd21
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/addend.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/maxq.exp52
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/paddr.dd16
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/paddr.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/paddr1.dd18
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/paddr1.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/r32-1.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/r32-2.s13
-rw-r--r--binutils-2.17/ld/testsuite/ld-maxq/r32.dd31
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/branch-misc-1.d30
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1-n32.d263
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1-n64.d425
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1.ld19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1.s152
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame2-n32.d255
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame2-n64.d409
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame3.d281
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame4.d208
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d314
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d333
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d331
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d428
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d437
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d435
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/emit-relocs-1.d37
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/emit-relocs-1.ld20
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/emit-relocs-1a.s22
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/emit-relocs-1b.s17
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/jalbal.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/jalbal.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow-2.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow-2.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/jr.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips-dyn.ld223
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips-elf-flags.exp163
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips-elf.exp245
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips-lib.ld218
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips16-1.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips16-1a.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips16-1b.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips16-hilo-n32.d338
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips16-hilo.d337
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips16-hilo.ld12
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/mips16-hilo.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-1-1.s16384
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-1-2.s16384
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-1.d8233
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s29
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-no-shared-2.s27
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-no-shared.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/region1.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/region1.t12
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/region1a.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/region1b.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/rel32-n32.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/rel32-o32.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/rel32.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/rel64.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/rel64.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n32-shared.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n32.d23
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n64-shared.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n64.d23
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr.s15
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1-n32.d199
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1-n64.d459
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1-rel.d356
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1a.s100
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1b.s95
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-2.d169
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-2.ld9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-2a.s78
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-2b.s73
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-merge-lo16.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-merge-lo16.ld9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/reloc-merge-lo16.s28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld17
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/textrel-1.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/textrel-1.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2-got.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2a.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2b.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.got24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.ld31
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.r13
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3a.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3b.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4.got28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4.r19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4a.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4b.s27
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s39
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.d20
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.got58
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.r61
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsbin-o32.d43
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsbin-o32.got8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsbin-o32.s89
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d104
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d104
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got20
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.s64
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d104
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got20
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.d58
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.got19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.s96
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-hidden.ver3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got16
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got17
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32.d45
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32.got17
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32.s70
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/tlslib.ver3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.dd50
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.nd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.rd18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.s52
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-static.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.dd51
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.ld32
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.rd32
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.s27
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks2-static.sd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks2.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mips-elf/vxworks2.sd13
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/a.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/areg-256.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/areg-t.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/aregm.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badfil1.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badfil1.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badfil2.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badfil2.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badfixo.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badfixo.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badloc.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badloc.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badlop.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badlop.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badm.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badm2.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badmain.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badquot.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badquot.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badrx1.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badrx1.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badrx2.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badrx2.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badrx3.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-badrx3.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-bend.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-bend1.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-bend2.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-bend3.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-bstab1.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-bstab1.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-fixo2.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-fixo2.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-goodmain.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-loc64k.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-loc64k.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-nosym.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-nosym.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-offloc.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-post1.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-twoinsn.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-widec.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-widec1.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-widec2.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-widec2.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-widec3.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/b-widec3.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-1.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-1.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-10.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-10.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-11.d34
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-11.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-12.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-12m.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-13.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-13m.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-14.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-14m.d20
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-15.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-15m.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-16.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-16m.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-17.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-17m.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-18.d32
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-18m.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-19.d36
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-19m.d30
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-1m.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-2.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-2.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-20.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-20m.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-21.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-21m.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-22.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-2m.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-3.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-3.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-3m.d20
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-4.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-4.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-4m.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-5.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-5.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-5m.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-6.d33
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-6.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-6m.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-7.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-7.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-7m.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-8.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-8.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-8m.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-9.d29
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-9.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo-9m.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bpo64addr.ld13
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec1.d46
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec1.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec1m.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec2.d56
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec2.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec2m.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec801.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec802.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec803.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec804.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec805.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec806.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec807.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bspec808.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bza-1b.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bza-1f.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bza-2b.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bza-2f.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bza-7b.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bza-7f.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bza-8b.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bza-8f.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/bza.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/data1.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/dloc1.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/dloc2.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/ext1-254.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/ext1.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/ext1g.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/ext1l.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-1b.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-1f.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-2b.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-2f.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-4b.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-4f.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-6b.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-6f.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-7b.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-7f.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-8b.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa-8f.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa12b.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa12f.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa14b.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/getaa14f.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-1.d30
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-1.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-10.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-11.d39
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-11b.d32
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-12.d34
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-13.d33
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-14.d32
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-14s.d23
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-15.d59
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-16.d59
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-17.d37
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-18.d39
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-19.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-2.d44
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-2.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-20.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-3.d39
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-3.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-4.d38
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-4.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-5.d37
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-5.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-5s.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-6.d289
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-7.d289
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-8.d37
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/greg-9.d39
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/gregbza1.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/gregget1.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/gregget2.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/gregldo1.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/gregpsj1.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/hdr-1.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-1b.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-1f.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-2b.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-2f.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-3b.d30
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-3f.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-4b.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-4f.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-5b.d31
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-5f.d29
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-6b.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-6f.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-7b.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-7f.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-8b.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-8f.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-9b.d30
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa-9f.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa12b.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa12f.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa13b.d31
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa13f.d29
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa14b.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/jumpa14f.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc1.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc1.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc1m.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc2.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc2.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc2m.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc3.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc3m.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc4.d31
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc4m.d17
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc5.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc5m.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc6.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc6m.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc7.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loc7m.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local1.d53
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local1.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local10.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local10m.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local11.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local11m.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local12.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local12m.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local1m.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local2.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local2.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local2m.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local3.d51
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local3m.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local4.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local4m.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local5.d52
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local5m.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local6.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local6m.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local7.d53
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local7m.d20
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local8.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local8m.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local9.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/local9m.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/locdo-1.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/locdo.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loct-1.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/loct.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/locto-1.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/locto.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/main1.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/mmix.exp32
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/mmohdr1.ld11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/mmosec1.ld16
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/mmosec2.ld13
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/nop123.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pad16.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pad2p18m32.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pad2p26m32.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pad4.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja1b-s.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja1b.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja1f-s.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja1f.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja2b.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja2f.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja7b-s.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja7b.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja7f-s.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja7f.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja8b.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushja8f.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs1.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs1b.d31
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs1bm.d29
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs1m.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs1r.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs2.d29
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs2b.d33
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs2bm.d31
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs2m.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs2r.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs3.d29
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs3b.d30
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs3bm.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs3m.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs3r.d32
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs4.d34
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs4b.d35
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs4bm.d33
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs4m.d33
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/pushjs4r.d29
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/reg-1.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/reg-1m.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/reg-2.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/reg-2m.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/regext1.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-1.d35
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-1.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-2.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-2.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-3.d36
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-4.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-5.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-6.d37
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-6.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-6m.d32
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-7a.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-7b.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-7c.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-7d.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-7e.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-7m.d38
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-8a.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-8b.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-8d.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-8m.d30
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-8m.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sec-9.d19
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/spec801.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/spec802.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/spec803.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/spec804.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/spec805.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/spec806.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/spec807.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/spec808.d25
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/start-1.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/start-2.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/start.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/start2.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/start3.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/start4.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sym-1.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sym-2.d142
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/sym-2.s130
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/undef-1.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/undef-1.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/undef-1m.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/undef-2.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/undef-2.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/undef-2m.d5
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/undef-3.d37
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/undef-3m.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/x.s26
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/y.s33
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/zeroeh.ld4
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/zeroehelf.d17
-rw-r--r--binutils-2.17/ld/testsuite/ld-mmix/zeroehmmo.d16
-rw-r--r--binutils-2.17/ld/testsuite/ld-pe/pe.exp31
-rw-r--r--binutils-2.17/ld/testsuite/ld-pe/secrel.d27
-rw-r--r--binutils-2.17/ld/testsuite/ld-pe/secrel1.s79
-rw-r--r--binutils-2.17/ld/testsuite/ld-pe/secrel2.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-pie/pie.c5
-rw-r--r--binutils-2.17/ld/testsuite/ld-pie/pie.exp40
-rw-r--r--binutils-2.17/ld/testsuite/ld-pie/weakundef-data.c15
-rw-r--r--binutils-2.17/ld/testsuite/ld-pie/weakundef.c15
-rw-r--r--binutils-2.17/ld/testsuite/ld-pie/weakundef.out1
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/apuinfo.rd10
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/apuinfo1.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/apuinfo2.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/powerpc.exp146
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/reloc.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/reloc.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/sdadyn.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/sdadyn.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/sdalib.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/symtocbase-1.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/symtocbase-2.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/symtocbase.d24
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tls.d53
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tls.g12
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tls.s92
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tls.t14
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tls32.d50
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tls32.g11
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tls32.s80
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tls32.t12
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.d76
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.g12
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.r116
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.t13
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.d47
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.g11
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.r114
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.t11
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.d60
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.g15
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.r116
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.t13
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlslib.s21
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlslib32.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsso.d76
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsso.g15
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsso.r132
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsso.t13
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.d46
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.g13
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.r133
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.t11
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlstoc.d37
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlstoc.g15
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlstoc.s88
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlstoc.t14
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.d60
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.g15
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.r128
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.t13
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.dd56
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.nd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.rd13
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.s38
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.sd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-static.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1.dd48
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1.ld30
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1.rd22
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks1.s14
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks2-static.sd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks2.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-powerpc/vxworks2.sd13
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/s390.exp72
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin.dd193
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin.rd148
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin.s73
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin.sd13
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.dd223
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.rd148
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.s75
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.sd18
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbinpic.s170
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlsbinpic_64.s186
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlslib.s17
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlslib_64.s17
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic.dd189
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic.rd146
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic.sd16
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic1.s208
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic1_64.s224
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic2.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic2_64.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic_64.dd202
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic_64.rd146
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic_64.sd21
-rw-r--r--binutils-2.17/ld/testsuite/ld-s390/tlspic_64.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align.exp52
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align.t8
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align2.t7
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align2a.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align2a.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align2b.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align2b.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align2c.d2
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/align2c.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/assert.exp31
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/assert.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/assert.t5
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/cross1.c6
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/cross1.t10
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/cross2.c5
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/cross2.t6
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/cross3.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/cross3.t10
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/cross4.c7
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/crossref.exp132
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/data.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/data.exp27
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/data.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/data.t11
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/defined.exp59
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/defined.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/defined.t7
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/defined2.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/defined2.t9
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/defined3.d35
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/defined3.t15
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections-1.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections-2.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections.d6
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections.exp8
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections.t11
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.d13
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.exp26
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.t29
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.d3
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.exp27
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.t21
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/map-address.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/map-address.exp37
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/map-address.t9
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/memory.t39
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/overlay-size-map.d23
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/overlay-size.d29
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/overlay-size.exp31
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/overlay-size.s25
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/overlay-size.t57
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/phdrs.exp61
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/phdrs.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/phdrs.t16
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/phdrs2.exp65
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/phdrs2.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/phdrs2.t23
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide-1.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide-1.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide-1.t12
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide-2.d7
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide-2.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide-2.t10
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide-3.d3
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide-3.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide-3.t11
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/provide.exp35
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/script.exp127
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/script.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/script.t16
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/scriptm.t10
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/size-1.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/size-1.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/size-1.t10
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/size-2.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/size-2.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/size-2.t21
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/size.exp38
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sizeof.exp71
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sizeof.s1
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sizeof.t17
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort.exp31
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a.t5
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-1.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-2.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-3.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a.t5
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-1.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-2.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-3.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n.t5
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n.t5
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-1.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-2.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-3.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a.t5
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-1.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-2.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-3.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n.t5
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_n_a-a.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_n_a-b.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_no-1.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_no-2.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/sort_no.t5
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/weak.exp69
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/weak.t12
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/weak1.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-scripts/weak2.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/1.c12
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/2.c19
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/3.cc46
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/4.cc34
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/5.cc38
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/keepdot.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/keepdot.ld5
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/keepdot.s17
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/keepdot0.d11
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/keepdot0.ld6
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/sel-dump.exp32
-rw-r--r--binutils-2.17/ld/testsuite/ld-selective/selective.exp213
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/arch.exp251
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/arch_expected.txt453
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh-dsp.s270
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh.s153
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh2.s164
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s166
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s167
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-nofpu.s219
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-or-sh3e.s203
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-or-sh4.s231
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh2a.s287
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh2e.s200
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh3-dsp.s285
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh3-nommu.s178
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh3.s179
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh3e.s216
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh4-nofpu.s192
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s191
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh4.s261
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh4a-nofpu.s199
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh4a.s269
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/arch/sh4al-dsp.s341
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/ld-r-1.d23
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/ldr1.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/ldr2.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/rd-sh.exp64
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/refdbg-0-dso.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/refdbg-1.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/refdbg.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/refdbglib.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh.exp163
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh1.s13
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh2.c120
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/abi32.sd16
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/abi32.xd48
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/abi64.sd20
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/abi64.xd47
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/abixx-noexp.sd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/cmpct1.sd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/cmpct1.xd39
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-1.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2a.s22
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2b.s39
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2c.s16
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2d.s9
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2e.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2f.s21
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2g.s26
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2h.s17
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2i.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange1.rd51
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange2.rd59
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd82
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange3-media.rd82
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange3.dd80
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crange3.rd63
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crangerel1.rd49
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/crangerel2.rd64
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/dlsection-1.s17
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/dlsection.sd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/endian.dbd11
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/endian.dld11
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/endian.ld6
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/endian.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/endian.sbd5
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/endian.sld6
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/gotplt.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/gotplt.map4
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/gotplt.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/init-cmpct.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/init-media.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/init.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/init64.d14
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/mix1-noexp.sd14
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/mix1.sd16
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/mix1.xd45
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/mix2-noexp.sd16
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/mix2.sd17
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/mix2.xd55
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/rd-sh64.exp41
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/rel-1.s48
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/rel-2.s46
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/rel32.xd97
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/rel64.xd97
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/relax.exp152
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/relax1.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/relax2.s3
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/relax3.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/relax4.s2
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/reldl-1.s171
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/reldl-2.s156
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/reldl32.rd361
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/reldl64.rd363
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/relfail.exp216
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/relfail.s36
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/sh64-1.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/sh64-2.s27
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/sh64.exp134
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/shcmp-1.s15
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/shdl-1.s359
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/shdl-2.s286
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/shdl32.xd126
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/shdl64.sd87
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/shdl64.xd126
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/shmix-1.s33
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/shmix-2.s28
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/shmix-3.s32
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/stobin-0-dso.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/stobin-1.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/stobin.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sh64/stolib.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/shared-1.d22
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/shared-2.d20
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/start.s27
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sub2l-1.d23
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/sub2l.s26
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/textrel1.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/textrel2.s7
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlsbin-0-dso.d9
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlsbin-1.d308
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlsbin-2.d79
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlsbin-3.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlsbin-4.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlsbin.s90
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlsbinpic.s206
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlslib.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlspic-1.d292
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlspic-2.d82
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlspic-3.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlspic-4.d12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlspic1.s267
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlspic2.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlstpoff-1.d31
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlstpoff-2.d8
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlstpoff1.s23
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/tlstpoff2.s26
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/weak1.d21
-rw-r--r--binutils-2.17/ld/testsuite/ld-sh/weak1.s19
-rw-r--r--binutils-2.17/ld/testsuite/ld-shared/elf-offset.ld170
-rw-r--r--binutils-2.17/ld/testsuite/ld-shared/main.c84
-rw-r--r--binutils-2.17/ld/testsuite/ld-shared/sh1.c166
-rw-r--r--binutils-2.17/ld/testsuite/ld-shared/sh2.c14
-rw-r--r--binutils-2.17/ld/testsuite/ld-shared/shared.dat16
-rw-r--r--binutils-2.17/ld/testsuite/ld-shared/shared.exp301
-rw-r--r--binutils-2.17/ld/testsuite/ld-shared/sun4.dat16
-rw-r--r--binutils-2.17/ld/testsuite/ld-shared/symbolic.dat8
-rw-r--r--binutils-2.17/ld/testsuite/ld-shared/xcoff.dat10
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/sparc.exp122
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlsg32.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlsg32.sd10
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlsg64.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlsg64.sd10
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlslib.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlsnopic.s8
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlspic.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.dd273
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.rd129
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.s114
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.sd11
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.td19
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.dd277
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.rd129
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.s118
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.sd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.td15
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbinpic32.s183
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunbinpic64.s182
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic32.dd84
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic32.rd96
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic32.s77
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic32.sd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic64.dd88
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic64.rd98
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic64.s81
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic64.sd14
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.dd220
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.rd139
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.s228
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.sd15
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.dd220
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.rd139
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.s228
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.sd20
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks1-lib.dd45
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks1-lib.nd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks1-lib.rd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks1-lib.s44
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks1-static.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks1.dd52
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks1.ld30
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks1.rd22
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks1.s25
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks2-static.sd9
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks2.s6
-rw-r--r--binutils-2.17/ld/testsuite/ld-sparc/vxworks2.sd13
-rw-r--r--binutils-2.17/ld/testsuite/ld-srec/sr1.c25
-rw-r--r--binutils-2.17/ld/testsuite/ld-srec/sr2.c18
-rw-r--r--binutils-2.17/ld/testsuite/ld-srec/sr3.cc127
-rw-r--r--binutils-2.17/ld/testsuite/ld-srec/srec.exp426
-rw-r--r--binutils-2.17/ld/testsuite/ld-undefined/undefined.c10
-rw-r--r--binutils-2.17/ld/testsuite/ld-undefined/undefined.exp132
-rw-r--r--binutils-2.17/ld/testsuite/ld-undefined/weak-undef.exp81
-rw-r--r--binutils-2.17/ld/testsuite/ld-undefined/weak-undef.s4
-rw-r--r--binutils-2.17/ld/testsuite/ld-undefined/weak-undef.t9
-rw-r--r--binutils-2.17/ld/testsuite/ld-v850/split-lo16.d26
-rw-r--r--binutils-2.17/ld/testsuite/ld-v850/split-lo16.ld11
-rw-r--r--binutils-2.17/ld/testsuite/ld-v850/split-lo16.s20
-rw-r--r--binutils-2.17/ld/testsuite/ld-v850/v850.exp3
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/t1-1.robin0 -> 3840 bytes
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/t1-2.robin0 -> 256 bytes
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/t1.ld281
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/t1.ook133
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/t2-1.robin0 -> 256 bytes
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/t2-2.robin0 -> 2304 bytes
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/t2-3.robin0 -> 1024 bytes
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/t2.ld281
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/t2.ook99
-rw-r--r--binutils-2.17/ld/testsuite/ld-versados/versados.exp99
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/abs.d10
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/pcrel16.d15
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/pcrel8.d4
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.dd310
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.rd150
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.s97
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.sd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.dd307
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.rd141
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.s128
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.sd12
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsbinpic.s146
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.dd204
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.pd26
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.rd164
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.s157
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.sd23
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsg.s12
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsg.sd10
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsgdesc.dd167
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsgdesc.rd107
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlsgdesc.s106
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlslib.s18
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlspic.dd230
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlspic.rd148
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlspic.sd19
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlspic.td16
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlspic1.s187
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/tlspic2.s11
-rw-r--r--binutils-2.17/ld/testsuite/ld-x86-64/x86-64.exp72
-rw-r--r--binutils-2.17/ld/testsuite/ld-xc16x/absrel.d28
-rw-r--r--binutils-2.17/ld/testsuite/ld-xc16x/absrel.s31
-rw-r--r--binutils-2.17/ld/testsuite/ld-xc16x/offset.d18
-rw-r--r--binutils-2.17/ld/testsuite/ld-xc16x/offset.s13
-rw-r--r--binutils-2.17/ld/testsuite/ld-xc16x/pcreloc.d34
-rw-r--r--binutils-2.17/ld/testsuite/ld-xc16x/pcreloc.s27
-rw-r--r--binutils-2.17/ld/testsuite/ld-xc16x/pcrelocl.d34
-rw-r--r--binutils-2.17/ld/testsuite/ld-xc16x/xc16x.exp65
-rw-r--r--binutils-2.17/ld/testsuite/ld-xstormy16/external.s5
-rw-r--r--binutils-2.17/ld/testsuite/ld-xstormy16/pcrel.d33
-rw-r--r--binutils-2.17/ld/testsuite/ld-xstormy16/pcrel.s31
-rw-r--r--binutils-2.17/ld/testsuite/ld-xstormy16/xstormy16.exp38
-rw-r--r--binutils-2.17/ld/testsuite/ld-xtensa/coalesce.exp97
-rw-r--r--binutils-2.17/ld/testsuite/ld-xtensa/coalesce.t6
-rw-r--r--binutils-2.17/ld/testsuite/ld-xtensa/coalesce1.s15
-rw-r--r--binutils-2.17/ld/testsuite/ld-xtensa/coalesce2.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-xtensa/lcall.exp111
-rw-r--r--binutils-2.17/ld/testsuite/ld-xtensa/lcall.t6
-rw-r--r--binutils-2.17/ld/testsuite/ld-xtensa/lcall1.s10
-rw-r--r--binutils-2.17/ld/testsuite/ld-xtensa/lcall2.s6
-rw-r--r--binutils-2.17/ld/testsuite/lib/ld-lib.exp1343
2204 files changed, 248876 insertions, 0 deletions
diff --git a/binutils-2.17/ld/ChangeLog b/binutils-2.17/ld/ChangeLog
new file mode 100644
index 00000000..bf6fc2f9
--- /dev/null
+++ b/binutils-2.17/ld/ChangeLog
@@ -0,0 +1,346 @@
+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-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-08 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-07 Joseph S. Myers <joseph@codesourcery.com>
+
+ * po/Make-in (pdf, ps): New dummy targets.
+
+2006-06-02 Joseph S. Myers <joseph@codesourcery.com>
+
+ * Makefile.am (TEXI2DVI): Add -I $(top_srcdir)/../libiberty.
+ * Makefile.in: Regenerate.
+
+2006-05-30 Nick Clifton <nickc@redhat.com>
+
+ * po/es.po: Updated Spanish translation.
+
+2006-05-24 Nick Clifton <nickc@redhat.com>
+
+ * po/vi.po: Updated Vietnamese translation.
+
+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>
+
+ * scripttempl/elf32crx.sc (.rdata): Add .rodata.*.
+
+2006-05-05 Alan Modra <amodra@bigpond.net.au>
+
+ * ld.texinfo: Document PowerPC and PowerPC64 options.
+ * gen-doc.texi: Enable.
+ * configdoc.texi: Regenerate.
+ * ld.info: Regenerate.
+
+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-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.17/ld/ChangeLog-0001 b/binutils-2.17/ld/ChangeLog-0001
new file mode 100644
index 00000000..9183afe5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/ChangeLog-0203 b/binutils-2.17/ld/ChangeLog-0203
new file mode 100644
index 00000000..ee5354de
--- /dev/null
+++ b/binutils-2.17/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.17/ld/ChangeLog-2004 b/binutils-2.17/ld/ChangeLog-2004
new file mode 100644
index 00000000..44eb03a5
--- /dev/null
+++ b/binutils-2.17/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 (seg_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.17/ld/ChangeLog-2005 b/binutils-2.17/ld/ChangeLog-2005
new file mode 100644
index 00000000..1d3db9eb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/ChangeLog-9197 b/binutils-2.17/ld/ChangeLog-9197
new file mode 100644
index 00000000..9307f333
--- /dev/null
+++ b/binutils-2.17/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.17/ld/ChangeLog-9899 b/binutils-2.17/ld/ChangeLog-9899
new file mode 100644
index 00000000..866e4a0c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/MAINTAINERS b/binutils-2.17/ld/MAINTAINERS
new file mode 100644
index 00000000..d59a3bd7
--- /dev/null
+++ b/binutils-2.17/ld/MAINTAINERS
@@ -0,0 +1 @@
+See ../binutils/MAINTAINERS
diff --git a/binutils-2.17/ld/Makefile.am b/binutils-2.17/ld/Makefile.am
new file mode 100644
index 00000000..3f5d1a6e
--- /dev/null
+++ b/binutils-2.17/ld/Makefile.am
@@ -0,0 +1,1954 @@
+## Process this file with automake to generate Makefile.in
+
+## FIXME: work around apparent automake bug.
+INTLLIBS = @INTLLIBS@
+
+AUTOMAKE_OPTIONS = cygnus dejagnu
+
+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`
+
+WARN_CFLAGS = @WARN_CFLAGS@
+NO_WERROR = @NO_WERROR@
+AM_CFLAGS = $(WARN_CFLAGS)
+
+# 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
+MKDEP = gcc -MM
+
+# 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
+
+#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 = gcc
+CXX_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 $(CXX); \
+ else \
+ echo gcc | sed '$(transform)'; \
+ fi; \
+ fi`
+
+noinst_PROGRAMS = ld-new
+info_TEXINFOS = ld.texinfo
+noinst_TEXINFOS = ldint.texinfo
+man_MANS = ld.1
+
+AM_MAKEINFOFLAGS = -I $(srcdir) -I $(BFDDIR)/doc -I $(top_srcdir)/../libiberty
+TEXI2DVI = texi2dvi -I $(srcdir) -I $(BFDDIR)/doc -I $(top_srcdir)/../libiberty
+
+INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) -I$(top_srcdir)/../intl -I../intl $(HDEFINES) $(CFLAGS) -DLOCALEDIR="\"$(datadir)/locale\""
+
+BFDLIB = ../bfd/libbfd.la
+LIBIBERTY = ../libiberty/libiberty.a
+
+ALL_EMULATIONS = \
+ eaixppc.o \
+ eaixrs6.o \
+ ealpha.o \
+ earcelf.o \
+ earm_epoc_pe.o \
+ earmaoutb.o \
+ earmaoutl.o \
+ earmcoff.o \
+ earmelf.o \
+ earmelfb.o \
+ earmelf_fbsd.o \
+ earmelf_linux.o \
+ earmelf_linux_eabi.o \
+ earmelfb_linux.o \
+ earmelfb_linux_eabi.o \
+ earmelf_nbsd.o \
+ earmelfb_nbsd.o \
+ earmelf_vxworks.o \
+ earmnto.o \
+ earmnbsd.o \
+ earmpe.o \
+ earmsymbian.o \
+ eavr2.o \
+ eavr1.o \
+ eavr3.o \
+ eavr4.o \
+ eavr5.o \
+ ecoff_i860.o \
+ ecoff_sparc.o \
+ ecrisaout.o \
+ ecriself.o \
+ ecrislinux.o \
+ ed10velf.o \
+ ed30v_e.o \
+ ed30v_o.o \
+ ed30velf.o \
+ edelta68.o \
+ eelf32_dlx.o \
+ eelf32_i960.o \
+ eelf32_i860.o \
+ eelf32_sparc.o \
+ eelf32_sparc_vxworks.o \
+ eelf32b4300.o \
+ eelf32bfin.o \
+ eelf32bfinfd.o \
+ eelf32cr16c.o \
+ eelf32bmip.o \
+ eelf32bmipn32.o \
+ eelf32btsmip.o \
+ eelf32crx.o \
+ eelf32btsmipn32.o \
+ eelf32ltsmip.o \
+ eelf32ltsmipn32.o \
+ eelf32ebmip.o \
+ eelf32ebmipvxworks.o \
+ eelf32elmip.o \
+ eelf32elmipvxworks.o \
+ eelf32fr30.o \
+ eelf32frv.o \
+ eelf32i370.o \
+ eelf32ip2k.o \
+ eelf32iq2000.o \
+ eelf32iq10.o \
+ eelf32l4300.o \
+ eelf32lmip.o \
+ eelf32lppc.o \
+ eelf32lppcnto.o \
+ eelf32lppcsim.o \
+ eelf32m32c.o \
+ eelf32mcore.o \
+ eelf32mipswindiss.o \
+ eelf32mt.o \
+ eelf32openrisc.o \
+ eelf32ppc.o \
+ eelf32ppc_fbsd.o \
+ eelf32ppclinux.o \
+ eelf32ppcnto.o \
+ eelf32ppcsim.o \
+ eelf32ppcwindiss.o \
+ eelf32ppcvxworks.o \
+ eelf32vax.o \
+ eelf32xc16x.o \
+ eelf32xc16xl.o \
+ eelf32xc16xs.o \
+ eelf32xstormy16.o \
+ eelf32xtensa.o \
+ eelf_i386.o \
+ eelf_i386_be.o \
+ eelf_i386_chaos.o \
+ eelf_i386_fbsd.o \
+ eelf_i386_ldso.o \
+ eelf_i386_vxworks.o \
+ eelf_s390.o \
+ egld960.o \
+ egld960coff.o \
+ eh8300.o \
+ eh8300h.o \
+ eh8300s.o \
+ eh8300elf.o \
+ eh8300hn.o \
+ eh8300sn.o \
+ eh8300sx.o \
+ eh8300helf.o \
+ eh8300self.o \
+ eh8300hnelf.o \
+ eh8300snelf.o \
+ eh8300sxelf.o \
+ eh8300sxn.o \
+ eh8300sxnelf.o \
+ eh8500.o \
+ eh8500b.o \
+ eh8500c.o \
+ eh8500m.o \
+ eh8500s.o \
+ ehp300bsd.o \
+ ehp3hpux.o \
+ ehppaelf.o \
+ ehppalinux.o \
+ ehppanbsd.o \
+ ehppaobsd.o \
+ ei386aout.o \
+ ei386beos.o \
+ ei386bsd.o \
+ ei386coff.o \
+ ei386go32.o \
+ ei386linux.o \
+ ei386lynx.o \
+ ei386mach.o \
+ ei386moss.o \
+ ei386msdos.o \
+ ei386nbsd.o \
+ ei386nto.o \
+ ei386nw.o \
+ ei386pe.o \
+ ei386pe_posix.o \
+ elnk960.o \
+ em32relf.o \
+ em32rlelf.o \
+ em32relf_linux.o \
+ em32rlelf_linux.o \
+ em68hc11elf.o \
+ em68hc11elfb.o \
+ em68hc12elf.o \
+ em68hc12elfb.o \
+ em68k4knbsd.o \
+ em68kaout.o \
+ em68kaux.o \
+ em68kcoff.o \
+ em68kelf.o \
+ em68kelfnbsd.o \
+ em68klinux.o \
+ em68knbsd.o \
+ em68kpsos.o \
+ em88kbcs.o \
+ emaxqcoff.o \
+ emcorepe.o \
+ emipsbig.o \
+ emipsbsd.o \
+ emipsidt.o \
+ emipsidtl.o \
+ emipslit.o \
+ emipslnews.o \
+ emipspe.o \
+ emsp430x110.o \
+ emsp430x112.o \
+ emsp430x1101.o \
+ emsp430x1111.o \
+ emsp430x1121.o \
+ emsp430x1122.o \
+ emsp430x1132.o \
+ emsp430x122.o \
+ emsp430x123.o \
+ emsp430x1222.o \
+ emsp430x1232.o \
+ emsp430x133.o \
+ emsp430x135.o \
+ emsp430x1331.o \
+ emsp430x1351.o \
+ emsp430x147.o \
+ emsp430x148.o \
+ emsp430x149.o \
+ emsp430x155.o \
+ emsp430x156.o \
+ emsp430x157.o \
+ emsp430x167.o \
+ emsp430x168.o \
+ emsp430x169.o \
+ emsp430x1610.o \
+ emsp430x1611.o \
+ emsp430x1612.o \
+ emsp430x2101.o \
+ emsp430x2111.o \
+ emsp430x2121.o \
+ emsp430x2131.o \
+ emsp430x311.o \
+ emsp430x312.o \
+ emsp430x313.o \
+ emsp430x314.o \
+ emsp430x315.o \
+ emsp430x323.o \
+ emsp430x325.o \
+ emsp430x336.o \
+ emsp430x337.o \
+ emsp430x412.o \
+ emsp430x413.o \
+ emsp430x415.o \
+ emsp430x417.o \
+ emsp430xE423.o \
+ emsp430xE425.o \
+ emsp430xE427.o \
+ emsp430xW423.o \
+ emsp430xW425.o \
+ emsp430xW427.o \
+ emsp430xG437.o \
+ emsp430xG438.o \
+ emsp430xG439.o \
+ emsp430x435.o \
+ emsp430x436.o \
+ emsp430x437.o \
+ emsp430x447.o \
+ emsp430x448.o \
+ emsp430x449.o \
+ enews.o \
+ ens32knbsd.o \
+ eor32.o \
+ eor32elf.o \
+ epc532macha.o \
+ epdp11.o \
+ epjelf.o \
+ epjlelf.o \
+ eppcmacos.o \
+ eppcnw.o \
+ eppcpe.o \
+ eppclynx.o \
+ eriscix.o \
+ esh.o \
+ eshelf32.o \
+ eshlelf32.o \
+ eshelf32_linux.o \
+ eshlelf32_linux.o \
+ eshelf32_nbsd.o \
+ eshlelf32_nbsd.o \
+ eshelf.o \
+ eshelf_linux.o \
+ eshlelf_linux.o \
+ eshelf_nbsd.o \
+ eshlelf_nbsd.o \
+ eshelf_nto.o \
+ eshlelf_nto.o \
+ eshl.o \
+ eshlelf.o \
+ eshlsymbian.o \
+ eshpe.o \
+ esparcaout.o \
+ esparclinux.o \
+ esparcnbsd.o \
+ est2000.o \
+ esun3.o \
+ esun4.o \
+ etic30aout.o \
+ etic30coff.o \
+ etic3xcoff.o \
+ etic3xcoff_onchip.o \
+ etic4xcoff.o \
+ etic54xcoff.o \
+ etic80coff.o \
+ evanilla.o \
+ evax.o \
+ evaxnbsd.o \
+ evsta.o \
+ ew65.o \
+ ez8001.o \
+ eelf32frvfd.o \
+ ez80.o \
+ ez8002.o
+
+ALL_64_EMULATIONS = \
+ eelf64_aix.o \
+ eelf64_ia64.o \
+ eelf64_ia64_fbsd.o \
+ eshelf64.o \
+ eshlelf64.o \
+ eshelf64_nbsd.o \
+ eshlelf64_nbsd.o \
+ eelf_x86_64.o \
+ eelf_x86_64_fbsd.o \
+ eelf64_s390.o \
+ eelf64_sparc.o \
+ eelf64_sparc_fbsd.o \
+ eelf64alpha.o \
+ eelf64alpha_fbsd.o \
+ eelf64alpha_nbsd.o \
+ eelf64bmip.o \
+ eelf64btsmip.o \
+ eelf64ltsmip.o \
+ eelf64hppa.o \
+ eelf64mmix.o \
+ emmo.o \
+ eelf64ppc.o \
+ eelf64lppc.o \
+ ehppa64linux.o
+
+ALL_EMUL_EXTRA_OFILES = \
+ deffilep.o \
+ pe-dll.o
+
+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
+
+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 elf-hints-local.h
+
+GENERATED_CFILES = ldgram.c ldlex.c deffilep.c
+GENERATED_HFILES = ldgram.h ldemul-list.h deffilep.h
+
+OFILES = ldgram.o ldlex.o lexsup.o ldlang.o mri.o ldctor.o ldmain.o \
+ ldwrite.o ldexp.o ldemul.o ldver.o ldmisc.o \
+ ldfile.o ldcref.o ${EMULATION_OFILES} ${EMUL_EXTRA_OFILES}
+
+STAGESTUFF = *.o 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.o:
+ $(COMPILE) -c $< $(NO_WERROR)
+ldlex.o:
+ $(COMPILE) -c $< $(NO_WERROR)
+deffilep.o:
+ $(COMPILE) -c $< $(NO_WERROR)
+
+# 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_COLLATE= sort > tmp \
+ && mv tmp $(srcdir)/po/POTFILES.in
+
+ldmain.o: ldmain.c config.status
+ $(COMPILE) -c -DDEFAULT_EMULATION='"$(EMUL)"' \
+ -DSCRIPTDIR='"$(scriptdir)"' -DBINDIR='"$(bindir)"' \
+ -DTOOLBINDIR='"$(tooldir)/bin"' \
+ -DTARGET='"@target@"' @TARGET_SYSTEM_ROOT_DEFINE@ \
+ $(srcdir)/ldmain.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
+
+# 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
+
+@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)"
+earcelf.c: $(srcdir)/emulparams/arcelf.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arcelf "$(tdir_arcelf)"
+earmelf.c: $(srcdir)/emulparams/armelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf "$(tdir_armelf)"
+earmelfb.c: $(srcdir)/emulparams/armelfb.sh $(srcdir)/emulparams/armelf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_fbsd "$(tdir_armelf_fbsd)"
+earmelf_linux.c: $(srcdir)/emulparams/armelf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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)"
+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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/armbpabi.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} armsymbian "$(tdir_armelf)"
+eavr2.c: $(srcdir)/emulparams/avr2.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr2 "$(tdir_avr2)"
+eavr1.c: $(srcdir)/emulparams/avr1.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr1 "$(tdir_avr2)"
+eavr3.c: $(srcdir)/emulparams/avr3.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr3 "$(tdir_avr2)"
+eavr4.c: $(srcdir)/emulparams/avr4.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr4 "$(tdir_avr2)"
+eavr5.c: $(srcdir)/emulparams/avr5.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr5 "$(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} criself "$(tdir_cris)"
+ecrislinux.c: $(srcdir)/emulparams/crislinux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} crislinux "$(tdir_cris)"
+ed10velf.c: $(srcdir)/emulparams/d10velf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfd10v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d10velf "$(tdir_d10v)"
+ed30velf.c: $(srcdir)/emulparams/d30velf.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30velf "$(tdir_d30v)"
+ed30v_o.c: $(srcdir)/emulparams/d30v_o.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30v_o "$(tdir_d30v)"
+ed30v_e.c: $(srcdir)/emulparams/d30v_e.sh \
+ $(srcdir)/emultempl/generic.em $(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 \
+ $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bfin "$(tdir_elf32bfin)" bfin
+eelf32bfinfd.c: $(srcdir)/emulparams/elf32bfinfd.sh $(srcdir)/emulparams/bfin.sh \
+ $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bfinfd "$(tdir_elf32bfinfd)" elf32bfinfd
+eelf32_dlx.c: $(srcdir)/emulparams/elf32_dlx.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/dlx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_dlx "$(tdir_elf32_dlx)"
+eelf32xc16x.c: $(srcdir)/emulparams/elf32xc16x.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16x "$(tdir_xc16x)"
+eelf32xc16xl.c: $(srcdir)/emulparams/elf32xc16xl.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16xl "$(tdir_xc16xl)"
+eelf32xc16xs.c: $(srcdir)/emulparams/elf32xc16xs.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16xs "$(tdir_xc16xs)"
+eelf32xstormy16.c: $(srcdir)/emulparams/elf32xstormy16.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/xstormy16.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xstormy16 "$(tdir_xstormy16)"
+eelf32am33lin.c: $(srcdir)/emulparams/elf32am33lin.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32am33lin "$(tdir_mn10300)"
+eelf32vax.c: $(srcdir)/emulparams/elf32vax.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32vax "$(tdir_elf32vax)"
+eelf32xtensa.c: $(srcdir)/emulparams/elf32xtensa.sh \
+ $(srcdir)/emulparams/xtensa-config.sh $(srcdir)/emultempl/elf32.em \
+ $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32fr30 "$(tdir_fr30)"
+eelf32frv.c: $(srcdir)/emulparams/elf32frv.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frv "$(tdir_frv)"
+eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mcore "$(tdir_mcore)"
+em32relf.c: $(srcdir)/emulparams/m32relf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32relf "$(tdir_m32r)"
+em32rlelf.c: $(srcdir)/emulparams/m32rlelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32rlelf "$(tdir_m32rlelf)"
+em32relf_linux.c: $(srcdir)/emulparams/m32relf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32relf_linux "$(tdir_m32relf_linux)"
+em32rlelf_linux.c: $(srcdir)/emulparams/m32rlelf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32rlelf_linux "$(tdir_m32rlelf_linux)"
+eelf32_sparc.c: $(srcdir)/emulparams/elf32_sparc.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc "$(tdir_elf32_sparc)"
+eelf32_sparc_vxworks.c: $(srcdir)/emulparams/elf32_sparc_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emulparams/elf32_sparc.sh \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc_vxworks "$(tdir_elf32_sparc_vxworks)"
+eelf32_i860.c: $(srcdir)/emulparams/elf32_i860.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_i860 "$(tdir_elf32_i860)"
+eelf32_i960.c: $(srcdir)/emulparams/elf32_i960.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_i960 "$(tdir_elf32_i960)"
+eelf32b4300.c: $(srcdir)/emulparams/elf32b4300.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32b4300 "$(tdir_elf32b4300)"
+eelf32cr16c.c: $(srcdir)/emulparams/elf32cr16c.sh \
+ $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf32cr16c.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32cr16c "$(tdir_elf32cr16c)"
+eelf32bmip.c: $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bmip "$(tdir_elf32bmip)"
+eelf32bsmip.c: $(srcdir)/emulparams/elf32bsmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bsmip "$(tdir_elf32bsmip)"
+eelf32btsmip.c: $(srcdir)/emulparams/elf32btsmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32btsmip "$(tdir_elf32btsmip)"
+eelf32crx.c: $(srcdir)/emulparams/elf32crx.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/crxelf.em \
+ $(srcdir)/scripttempl/elf32crx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32crx "$(tdir_elf32crx)"
+eelf32btsmipn32.c: $(srcdir)/emulparams/elf32btsmipn32.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ltsmip "$(tdir_elf32ltsmip)"
+eelf32ltsmipn32.c: $(srcdir)/emulparams/elf32ltsmipn32.sh \
+ $(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ltsmipn32 "$(tdir_elf32ltsmipn32)"
+eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ebmip "$(tdir_elf32ebmip)"
+eelf32ebmipvxworks.c: $(srcdir)/emulparams/elf32ebmipvxworks.sh \
+ $(srcdir)/emulparams/elf32ebmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(srcdir)/emultempl/elf32.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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32elmip "$(tdir_elf32elmip)"
+eelf32elmipvxworks.c: $(srcdir)/emulparams/elf32elmipvxworks.sh \
+ $(srcdir)/emulparams/elf32elmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/vxworks.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32elmipvxworks "$(tdir_elf32elmipvxworks)"
+eelf32bmipn32.c: $(srcdir)/emulparams/elf32bmipn32.sh \
+ $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/elf32.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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32l4300 "$(tdir_elf32l4300)"
+eelf32lmip.c: $(srcdir)/emulparams/elf32lmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lmip "$(tdir_elf32lmip)"
+eelf32mipswindiss.c: $(srcdir)/emulparams/elf32mipswindiss.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mipswindiss "$(tdir_elf32mipswindiss)"
+eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emultempl/ppc32elf.em \
+ $(srcdir)/emultempl/elf32.em $(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 $(srcdir)/emultempl/elf32.em \
+ $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcnto "$(tdir_elf32ppcnto)"
+eelf32ppcwindiss.c: $(srcdir)/emulparams/elf32ppcwindiss.sh \
+ $(srcdir)/emultempl/elf32.em $(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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcvxworks "$(tdir_elf32ppcvxworks)"
+eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \
+ $(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lsmip "$(tdir_elf32lsmip)"
+eelf32openrisc.c: $(srcdir)/emulparams/elf32openrisc.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32openrisc "$(tdir_openrisc)"
+eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
+ $(srcdir)/emultempl/elf32.em $(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 $(srcdir)/emultempl/elf32.em \
+ $(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 $(srcdir)/emultempl/elf32.em \
+ $(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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppclinux "$(tdir_elf32ppclinux)"
+eelf64ppc.c: $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64ppc "$(tdir_elf64ppc)"
+eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
+ $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64lppc "$(tdir_elf64lppc)"
+eelf32i370.c: $(srcdir)/emulparams/elf32i370.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfi370.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32i370 "$(tdir_elf32i370)"
+eelf32ip2k.c: $(srcdir)/emulparams/elf32ip2k.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/ip2k.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ip2k "$(tdir_ip2k)"
+eelf32iq2000.c: $(srcdir)/emulparams/elf32iq2000.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32iq2000 "$(tdir_iq2000)"
+eelf32iq10.c: $(srcdir)/emulparams/elf32iq10.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32iq10 "$(tdir_iq10)"
+eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/alphaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64alpha_nbsd "$(tdir_elf64alpha_nbsd)"
+eelf64hppa.c: $(srcdir)/emulparams/elf64hppa.sh \
+ $(srcdir)/emulparams/hppa64linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64hppa "$(tdir_elf64hppa)"
+eelf64_aix.c: $(srcdir)/emulparams/elf64_aix.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_aix "$(tdir_elf64_aix)"
+eelf64_ia64.c: $(srcdir)/emulparams/elf64_ia64.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_s390 "$(tdir_elf64_s390)"
+eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_sparc_fbsd "$(tdir_elf64_sparc_fbsd)"
+eelf64bmip.c: $(srcdir)/emulparams/elf64bmip.sh \
+ $(srcdir)/emulparams/elf32bmipn32.sh $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64bmip "$(tdir_elf64bmip)"
+eelf64mmix.c: $(srcdir)/emulparams/elf64mmix.sh \
+ $(srcdir)/emultempl/elf32.em $(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/mmo.em \
+ $(srcdir)/scripttempl/mmo.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mmo "$(tdir_mmo)"
+eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \
+ $(srcdir)/emulparams/elf32bmipn32.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)"
+eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \
+ $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf32bmipn32.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)"
+eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)"
+eelf_x86_64.c: $(srcdir)/emulparams/elf_x86_64.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64_fbsd "$(tdir_elf_x86_64_fbsd)"
+eelf_i386_be.c: $(srcdir)/emulparams/elf_i386_be.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_be "$(tdir_elf_i386_be)"
+eelf_i386_chaos.c: $(srcdir)/emulparams/elf_i386_chaos.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_fbsd "$(tdir_elf_i386_fbsd)"
+eelf_i386_ldso.c: $(srcdir)/emulparams/elf_i386_ldso.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_ldso "$(tdir_elf_i386_ldso)"
+eelf_i386_vxworks.c: $(srcdir)/emulparams/elf_i386_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emultempl/vxworks.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_vxworks "$(tdir_elf_i386_vxworks)"
+eelf_s390.c: $(srcdir)/emulparams/elf_s390.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300elf "$(tdir_h8300elf)"
+eh8300helf.c: $(srcdir)/emulparams/h8300helf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300helf "$(tdir_h8300helf)"
+eh8300self.c: $(srcdir)/emulparams/h8300self.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300self "$(tdir_h8300self)"
+eh8300hnelf.c: $(srcdir)/emulparams/h8300hnelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300hnelf "$(tdir_h8300hnelf)"
+eh8300snelf.c: $(srcdir)/emulparams/h8300snelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300snelf "$(tdir_h8300snelf)"
+eh8300sxelf.c: $(srcdir)/emulparams/h8300sxelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sxelf "$(tdir_h8300sxelf)"
+eh8300sxnelf.c: $(srcdir)/emulparams/h8300sxnelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/hppaelf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppaelf "$(tdir_hppaelf)"
+ehppalinux.c: $(srcdir)/emulparams/hppalinux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppalinux "$(tdir_hppalinux)"
+ehppanbsd.c: $(srcdir)/emulparams/hppanbsd.sh \
+ $(srcdir)/emulparams/hppaelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppanbsd "$(tdir_hppanbsd)"
+ehppaobsd.c: $(srcdir)/emulparams/hppaobsd.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppaobsd "$(tdir_hppaobsd)"
+ehppa64linux.c: $(srcdir)/emulparams/hppa64linux.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386nto "$(tdir_i386nto)"
+ei386nw.c: $(srcdir)/emulparams/i386nw.sh \
+ $(srcdir)/emultempl/elf32.em $(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)"
+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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc11elf "$(tdir_m68hc11)"
+em68hc11elfb.c: $(srcdir)/emulparams/m68hc11elfb.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc11elfb "$(tdir_m68hc11b)"
+em68hc12elf.c: $(srcdir)/emulparams/m68hc12elf.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc12elf "$(tdir_m68hc12)"
+em68hc12elfb.c: $(srcdir)/emulparams/m68hc12elfb.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/m68kelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kelf "$(tdir_m68kelf)"
+em68kelfnbsd.c: $(srcdir)/emulparams/m68kelfnbsd.sh \
+ $(srcdir)/emulparams/m68kelf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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)"
+emaxqcoff.c: $(srcdir)/emulparams/maxqcoff.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/maxqcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} maxqcoff "$(tdir_maxqcoff)"
+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
+emipsbsd.c: $(srcdir)/emulparams/mipsbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mipsbsd.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbsd
+emipsidt.c: $(srcdir)/emulparams/mipsidt.sh \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsidt "$(tdir_mipsidt)"
+emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/emultempl/generic.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
+emipspe.c: $(srcdir)/emulparams/mipspe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipspe "$(tdir_mips)"
+emn10300.c: $(srcdir)/emulparams/mn10300.sh \
+ $(srcdir)/emulparams/mn10200.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mn10300 "$(tdir_mn10300)"
+emn10200.c: $(srcdir)/emulparams/mn10200.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mn10200 "$(tdir_mn10200)"
+emsp430x110.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x110 "$(tdir_msp430x110)" msp430all
+emsp430x112.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x112 "$(tdir_msp430x112)" msp430all
+emsp430x1101.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1101 "$(tdir_msp430x1101)" msp430all
+emsp430x1111.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1111 "$(tdir_msp430x1111)" msp430all
+emsp430x1121.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1121 "$(tdir_msp430x1121)" msp430all
+emsp430x1122.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1122 "$(tdir_msp430x1122)" msp430all
+emsp430x1132.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1132 "$(tdir_msp430x1132)" msp430all
+emsp430x122.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x122 "$(tdir_msp430x122)" msp430all
+emsp430x123.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x123 "$(tdir_msp430x123)" msp430all
+emsp430x1222.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1222 "$(tdir_msp430x1222)" msp430all
+emsp430x1232.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1232 "$(tdir_msp430x1232)" msp430all
+emsp430x133.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x133 "$(tdir_msp430x133)" msp430all
+emsp430x135.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x135 "$(tdir_msp430x135)" msp430all
+emsp430x1331.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1331 "$(tdir_msp430x1331)" msp430all
+emsp430x1351.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1351 "$(tdir_msp430x1351)" msp430all
+emsp430x147.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x147 "$(tdir_msp430x147)" msp430all
+emsp430x148.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x148 "$(tdir_msp430x148)" msp430all
+emsp430x149.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x149 "$(tdir_msp430x149)" msp430all
+emsp430x155.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x155 "$(tdir_msp430x155)" msp430all
+emsp430x156.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x156 "$(tdir_msp430x156)" msp430all
+emsp430x157.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x157 "$(tdir_msp430x157)" msp430all
+emsp430x167.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x167 "$(tdir_msp430x167)" msp430all
+emsp430x168.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x168 "$(tdir_msp430x168)" msp430all
+emsp430x169.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x169 "$(tdir_msp430x169)" msp430all
+emsp430x1610.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1610 "$(tdir_msp430x1610)" msp430all
+emsp430x1611.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1611 "$(tdir_msp430x1611)" msp430all
+emsp430x1612.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1612 "$(tdir_msp430x1612)" msp430all
+emsp430x2101.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2101 "$(tdir_msp430x2101)" msp430all
+emsp430x2111.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2111 "$(tdir_msp430x2111)" msp430all
+emsp430x2121.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2121 "$(tdir_msp430x2121)" msp430all
+emsp430x2131.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2131 "$(tdir_msp430x2131)" msp430all
+emsp430x311.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x311 "$(tdir_msp430x311)" msp430all
+emsp430x312.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x312 "$(tdir_msp430x312)" msp430all
+emsp430x313.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x313 "$(tdir_msp430x313)" msp430all
+emsp430x314.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x314 "$(tdir_msp430x314)" msp430all
+emsp430x315.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x315 "$(tdir_msp430x315)" msp430all
+emsp430x323.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x323 "$(tdir_msp430x323)" msp430all
+emsp430x325.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x325 "$(tdir_msp430x325)" msp430all
+emsp430x336.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x336 "$(tdir_msp430x336)" msp430all
+emsp430x337.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x337 "$(tdir_msp430x337)" msp430all
+emsp430x412.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x412 "$(tdir_msp430x412)" msp430all
+emsp430x413.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x413 "$(tdir_msp430x413)" msp430all
+emsp430x415.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x415 "$(tdir_msp430x415)" msp430all
+emsp430x417.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x417 "$(tdir_msp430x417)" msp430all
+emsp430xE423.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE423 "$(tdir_msp430xE423)" msp430all
+emsp430xE425.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE425 "$(tdir_msp430xE425)" msp430all
+emsp430xE427.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE427 "$(tdir_msp430xE427)" msp430all
+emsp430xW423.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW423 "$(tdir_msp430xW423)" msp430all
+emsp430xW425.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW425 "$(tdir_msp430xW425)" msp430all
+emsp430xW427.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW427 "$(tdir_msp430xW427)" msp430all
+emsp430xG437.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG437 "$(tdir_msp430xG437)" msp430all
+emsp430xG438.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG438 "$(tdir_msp430xG438)" msp430all
+emsp430xG439.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG439 "$(tdir_msp430xG439)" msp430all
+emsp430x435.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x435 "$(tdir_msp430x435)" msp430all
+emsp430x436.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x436 "$(tdir_msp430x436)" msp430all
+emsp430x437.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x437 "$(tdir_msp430x437)" msp430all
+emsp430x447.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x447 "$(tdir_msp430x447)" msp430all
+emsp430x448.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x448 "$(tdir_msp430x448)" msp430all
+emsp430x449.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(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 \
+ $(srcdir)/emultempl/generic.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pjelf "$(tdir_pjelf)"
+epjlelf.c: $(srcdir)/emulparams/pjlelf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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)"
+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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf32_nbsd "$(tdir_shelf32_nbsd)"
+eshelf64.c: $(srcdir)/emulparams/shelf64.sh $(srcdir)/emulparams/shelf32.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf64_nbsd "$(tdir_shelf64_nbsd)"
+eshelf_linux.c: $(srcdir)/emulparams/shelf_linux.sh \
+ $(srcdir)/emulparams/shlelf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_linux "$(tdir_shelf_linux)"
+eshlelf_linux.c: $(srcdir)/emulparams/shlelf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_linux "$(tdir_shlelf_linux)"
+eshelf_nbsd.c: $(srcdir)/emulparams/shelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_nbsd "$(tdir_shelf_nbsd)"
+eshelf_nto.c: $(srcdir)/emulparams/shelf_nto.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_nto "$(tdir_shelf_nto)"
+eshlelf_nbsd.c: $(srcdir)/emulparams/shlelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_nbsd "$(tdir_shlelf_nbsd)"
+eshlelf_nto.c: $(srcdir)/emulparams/shlelf_nto.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_nto "$(tdir_shlelf_nto)"
+eshlelf.c: $(srcdir)/emulparams/shlelf.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf "$(tdir_shlelf)"
+eshlsymbian.c: $(srcdir)/emulparams/shlsymbian.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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)"
+eelf32frvfd.c: $(srcdir)/emulparams/elf32frvfd.sh \
+ $(srcdir)/emulparams/elf32frv.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frvfd "$(tdir_frv)"
+eelf32m32c.c: $(srcdir)/emulparams/elf32m32c.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32m32c "$(tdir_m32c)"
+eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mt "$(tdir_mt)"
+
+# We need this for automake to use YLWRAP.
+EXTRA_ld_new_SOURCES = deffilep.y
+
+ld_new_SOURCES = ldgram.y ldlex.l lexsup.c ldlang.c mri.c ldctor.c ldmain.c \
+ ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c
+ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(INTLDEPS)
+ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(INTLLIBS)
+
+# The generated emulation files mostly have the same dependencies.
+$(EMULATION_OFILES): ../bfd/bfd.h sysdep.h config.h $(INCDIR)/bfdlink.h \
+ ld.h ldmain.h ldemul.h ldfile.h ldmisc.h ldexp.h ldlang.h \
+ ldctor.h ldexp.h ldlang.h ldgram.h
+
+# 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) $(INTLLIBS)" LIBS="$(LIBS)" \
+ $(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.o: ld-new$(EXEEXT)
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld-partial.o -r $(OFILES)
+ld1$(EXEEXT): ld-partial.o
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1$(EXEEXT) $(HOSTING_CRT0) ld-partial.o $(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.o cdtest-bar.o cdtest-foo.o ld.new
+# ./ld.new $(HOSTING_EMU) -o cdtest $(HOSTING_CRT0) \
+# cdtest-main.o cdtest-bar.o cdtest-foo.o $(HOSTING_LIBS)
+#
+#cdtest.out: cdtest
+# ./cdtest > cdtest.tmp
+# mv cdtest.tmp cdtest.out
+#
+#cdtest-ur.o: cdtest-main.o cdtest-bar.o cdtest-foo.o ld.new
+# ./ld.new $(HOSTING_EMU) -o cdtest-ur.o -Ur cdtest-main.o \
+# cdtest-bar.o cdtest-foo.o
+#
+#cdtest-ur: cdtest-ur.o
+# ./ld.new $(HOSTING_EMU) -o cdtest-ur $(HOSTING_CRT0) cdtest-ur.o \
+# $(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
+
+# 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
+
+ldver.texi: $(srcdir)/../bfd/configure
+ rm -f $@
+ eval `grep '^ *VERSION=' $(srcdir)/../bfd/configure`; \
+ echo "@set VERSION $$VERSION" > $@
+
+$(srcdir)/ld.info ld.dvi ld.html: $(srcdir)/ld.texinfo configdoc.texi ldver.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 ldver.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 = ldver.texi configdoc.texi
+
+# 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.o crtend.o ld.log ld.sum
+mostlyclean-local:
+ -rm -rf tmpdir
+CLEANFILES = dep.sed DEP DEPA DEP1 DEP2
+
+.PHONY: install-html install-html-am install-html-recursive
+
+html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+
+install-html: install-html-recursive install-html-am
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)"
+ @list='$(HTMLS)'; for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
+ f=$(html__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"; \
+ else \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
+ fi; \
+ done
+
+install-html-recursive:
+ @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; \
+ (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"
+
+.PHONY: install-exec-local install-data-local
+
+install-exec-local: ld-new$(EXEEXT)
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(tooldir)/bin
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed -e 's/$(EXEEXT)$$//' -e 's/-new//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed -e 's/$(EXEEXT)$$//' -e 's/-new//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ else :; fi; \
+ done
+ n=`echo ld | sed '$(transform)'`; \
+ if [ "$(bindir)/$$n$(EXEEXT)" != "$(tooldir)/bin/ld$(EXEEXT)" ]; 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
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts
+ for f in ldscripts/*; do \
+ $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \
+ done
+
+# We want install to imply install-info as per GNU standards, despite the
+# cygnus option.
+install-data-local: install-info
+
+# 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 $(man_MANS)
+diststuff: info $(EXTRA_DIST)
+all: info ld.1
+
+# Both info (ld.info) and ld.1 depend on configdoc.texi and ldver.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
+
+# Targets to rebuild dependencies in this Makefile.
+# Have to get rid of DEP1 here so that "$?" later includes all of $(CFILES).
+DEP: dep.sed $(CFILES) $(HFILES) $(GENERATED_CFILES) $(GENERATED_HFILES) config.h
+ rm -f DEP1
+ $(MAKE) MKDEP="$(MKDEP)" DEP1
+ sed -f dep.sed < DEP1 > DEPA
+ echo '# IF YOU PUT ANYTHING HERE IT WILL GO AWAY' >> DEPA
+ if grep ' /' DEPA > /dev/null 2> /dev/null; then \
+ echo 'make DEP failed!'; exit 1; \
+ else \
+ mv -f DEPA $@; \
+ fi
+
+DEP1: $(CFILES) $(GENERATED_CFILES)
+ echo '# DO NOT DELETE THIS LINE -- mkdep uses it.' > DEP2
+ echo '# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.' >> DEP2
+ $(MKDEP) $(INCLUDES) $(CFLAGS) $? >> DEP2
+ mv -f DEP2 $@
+
+dep.sed: dep-in.sed config.status
+ sed <$(srcdir)/dep-in.sed >dep.sed \
+ -e 's!@INCDIR@!$(INCDIR)!' \
+ -e 's!@BFDDIR@!$(BFDDIR)!' \
+ -e 's!@SRCDIR@!$(srcdir)!' \
+ -e 's!@TOPDIR@!'`echo $(srcdir) | sed -e s,/ld$$,,`'!'
+
+dep: DEP
+ sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < Makefile > tmp-Makefile
+ cat DEP >> tmp-Makefile
+ $(srcdir)/../move-if-change tmp-Makefile Makefile
+
+dep-in: DEP
+ sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.in > tmp-Makefile.in
+ cat DEP >> tmp-Makefile.in
+ $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in
+
+dep-am: DEP
+ sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.am > tmp-Makefile.am
+ cat DEP >> tmp-Makefile.am
+ $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am
+
+.PHONY: dep dep-in dep-am
+
+# What appears below is generated by a hacked mkdep using gcc -MM.
+
+# DO NOT DELETE THIS LINE -- mkdep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
+ldctor.o: ldctor.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h ld.h $(INCDIR)/bin-bugs.h \
+ ldexp.h ldlang.h ldmisc.h ldgram.h ldmain.h ldctor.h
+ldemul.o: ldemul.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldmisc.h \
+ ldexp.h ldlang.h ldfile.h ldemul.h ldmain.h ldemul-list.h
+ldexp.o: ldexp.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldmain.h \
+ ldmisc.h ldexp.h ldgram.h ldlang.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/safe-ctype.h
+ldfile.o: ldfile.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmisc.h ldexp.h ldlang.h ldfile.h ldmain.h ldgram.h \
+ ldlex.h ldemul.h $(INCDIR)/libiberty.h $(INCDIR)/filenames.h
+ldlang.o: ldlang.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
+ $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldmain.h \
+ ldexp.h ldlang.h ldgram.h ldlex.h ldmisc.h ldctor.h \
+ ldfile.h ldemul.h $(INCDIR)/fnmatch.h $(INCDIR)/demangle.h \
+ $(INCDIR)/hashtab.h
+ldmain.o: ldmain.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/libiberty.h $(INCDIR)/progress.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/filenames.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmain.h ldmisc.h ldwrite.h ldexp.h ldlang.h ldgram.h \
+ ldlex.h ldfile.h ldemul.h ldctor.h
+ldmisc.o: ldmisc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h sysdep.h config.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/demangle.h \
+ ld.h $(INCDIR)/bin-bugs.h ldmisc.h ldexp.h ldlang.h \
+ ldgram.h ldlex.h ldmain.h ldfile.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h
+ldver.o: ldver.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h ../bfd/bfdver.h sysdep.h config.h \
+ $(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h ldver.h \
+ ldexp.h ldlang.h ldfile.h ldemul.h ldmain.h
+ldwrite.o: ldwrite.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
+ ld.h $(INCDIR)/bin-bugs.h ldexp.h ldlang.h ldwrite.h \
+ ldmisc.h ldgram.h ldmain.h
+lexsup.o: lexsup.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h \
+ ld.h $(INCDIR)/bin-bugs.h ldmain.h ldmisc.h ldexp.h \
+ ldlang.h ldgram.h ldlex.h ldfile.h ldver.h ldemul.h \
+ $(INCDIR)/demangle.h
+mri.o: mri.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ sysdep.h config.h $(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h \
+ ldexp.h ldlang.h ldmisc.h mri.h ldgram.h $(INCDIR)/libiberty.h
+ldcref.o: ldcref.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmain.h ldmisc.h ldexp.h ldlang.h
+pe-dll.o: pe-dll.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
+ ld.h $(INCDIR)/bin-bugs.h ldexp.h ldlang.h ldwrite.h \
+ ldmisc.h ldgram.h ldmain.h ldfile.h ldemul.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h deffile.h pe-dll.h
+ldgram.o: ldgram.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldexp.h \
+ ldver.h ldlang.h ldfile.h ldemul.h ldmisc.h ldmain.h \
+ mri.h ldctor.h ldlex.h
+ldlex.o: ldlex.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmisc.h ldexp.h ldlang.h ldgram.h ldfile.h ldlex.h \
+ ldmain.h $(INCDIR)/libiberty.h
+deffilep.o: deffilep.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h ../bfd/bfd.h $(INCDIR)/symcat.h \
+ sysdep.h config.h $(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmisc.h deffile.h
+# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/binutils-2.17/ld/Makefile.in b/binutils-2.17/ld/Makefile.in
new file mode 100644
index 00000000..afe1aa5f
--- /dev/null
+++ b/binutils-2.17/ld/Makefile.in
@@ -0,0 +1,2738 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 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@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+noinst_PROGRAMS = ld-new$(EXEEXT)
+DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub 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 ldlex.c deffilep.h \
+ deffilep.c $(srcdir)/../ylwrap $(srcdir)/../ltmain.sh \
+ $(srcdir)/../config.guess $(srcdir)/../config.sub
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/../bfd/acinclude.m4 \
+ $(top_srcdir)/../config/acx.m4 $(top_srcdir)/../bfd/bfd.m4 \
+ $(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../libtool.m4 \
+ $(top_srcdir)/../gettext.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 configure.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = po/Makefile.in
+PROGRAMS = $(noinst_PROGRAMS)
+am_ld_new_OBJECTS = ldgram.$(OBJEXT) ldlex.$(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)
+ld_new_OBJECTS = $(am_ld_new_OBJECTS)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = ../bfd/libbfd.la
+am__DEPENDENCIES_3 = ../libiberty/libiberty.a
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
+depcomp =
+am__depfiles_maybe =
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
+LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+LTYACCCOMPILE = $(LIBTOOL) --mode=compile $(YACC) $(YFLAGS) \
+ $(AM_YFLAGS)
+YLWRAP = $(top_srcdir)/../ylwrap
+SOURCES = $(ld_new_SOURCES) $(EXTRA_ld_new_SOURCES)
+INFO_DEPS = ld.info
+TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex
+am__TEXINFO_TEX_DIR = $(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-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DEJATOOL = $(PACKAGE)
+RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir
+DIST_SUBDIRS = $(SUBDIRS)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+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@
+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@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GT_NO = @GT_NO@
+GT_YES = @GT_YES@
+HDEFINES = @HDEFINES@
+
+#stuff for self hosting (can be overridden in config file).
+HOSTING_CRT0 = @HOSTING_CRT0@
+HOSTING_LIBS = @HOSTING_LIBS@
+INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLDEPS = @INTLDEPS@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+LDFLAGS = @LDFLAGS@
+LEX = `if [ -f ../flex/flex ]; then echo ../flex/flex; else echo @LEX@; fi`
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+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@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+NATIVE_LIB_DIRS = @NATIVE_LIB_DIRS@
+NO_WERROR = @NO_WERROR@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POFILES = @POFILES@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+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_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+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`
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+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@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+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_sh = @install_sh@
+l = @l@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+use_sysroot = @use_sysroot@
+AUTOMAKE_OPTIONS = cygnus dejagnu
+SUBDIRS = po
+tooldir = $(exec_prefix)/$(target_alias)
+YFLAGS = -d
+AM_CFLAGS = $(WARN_CFLAGS)
+
+# 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
+MKDEP = gcc -MM
+
+# 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
+
+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 = gcc
+CXX_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 $(CXX); \
+ else \
+ echo gcc | sed '$(transform)'; \
+ fi; \
+ fi`
+
+info_TEXINFOS = ld.texinfo
+noinst_TEXINFOS = ldint.texinfo
+man_MANS = ld.1
+AM_MAKEINFOFLAGS = -I $(srcdir) -I $(BFDDIR)/doc -I $(top_srcdir)/../libiberty
+TEXI2DVI = texi2dvi -I $(srcdir) -I $(BFDDIR)/doc -I $(top_srcdir)/../libiberty
+INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) -I$(top_srcdir)/../intl -I../intl $(HDEFINES) $(CFLAGS) -DLOCALEDIR="\"$(datadir)/locale\""
+BFDLIB = ../bfd/libbfd.la
+LIBIBERTY = ../libiberty/libiberty.a
+ALL_EMULATIONS = \
+ eaixppc.o \
+ eaixrs6.o \
+ ealpha.o \
+ earcelf.o \
+ earm_epoc_pe.o \
+ earmaoutb.o \
+ earmaoutl.o \
+ earmcoff.o \
+ earmelf.o \
+ earmelfb.o \
+ earmelf_fbsd.o \
+ earmelf_linux.o \
+ earmelf_linux_eabi.o \
+ earmelfb_linux.o \
+ earmelfb_linux_eabi.o \
+ earmelf_nbsd.o \
+ earmelfb_nbsd.o \
+ earmelf_vxworks.o \
+ earmnto.o \
+ earmnbsd.o \
+ earmpe.o \
+ earmsymbian.o \
+ eavr2.o \
+ eavr1.o \
+ eavr3.o \
+ eavr4.o \
+ eavr5.o \
+ ecoff_i860.o \
+ ecoff_sparc.o \
+ ecrisaout.o \
+ ecriself.o \
+ ecrislinux.o \
+ ed10velf.o \
+ ed30v_e.o \
+ ed30v_o.o \
+ ed30velf.o \
+ edelta68.o \
+ eelf32_dlx.o \
+ eelf32_i960.o \
+ eelf32_i860.o \
+ eelf32_sparc.o \
+ eelf32_sparc_vxworks.o \
+ eelf32b4300.o \
+ eelf32bfin.o \
+ eelf32bfinfd.o \
+ eelf32cr16c.o \
+ eelf32bmip.o \
+ eelf32bmipn32.o \
+ eelf32btsmip.o \
+ eelf32crx.o \
+ eelf32btsmipn32.o \
+ eelf32ltsmip.o \
+ eelf32ltsmipn32.o \
+ eelf32ebmip.o \
+ eelf32ebmipvxworks.o \
+ eelf32elmip.o \
+ eelf32elmipvxworks.o \
+ eelf32fr30.o \
+ eelf32frv.o \
+ eelf32i370.o \
+ eelf32ip2k.o \
+ eelf32iq2000.o \
+ eelf32iq10.o \
+ eelf32l4300.o \
+ eelf32lmip.o \
+ eelf32lppc.o \
+ eelf32lppcnto.o \
+ eelf32lppcsim.o \
+ eelf32m32c.o \
+ eelf32mcore.o \
+ eelf32mipswindiss.o \
+ eelf32mt.o \
+ eelf32openrisc.o \
+ eelf32ppc.o \
+ eelf32ppc_fbsd.o \
+ eelf32ppclinux.o \
+ eelf32ppcnto.o \
+ eelf32ppcsim.o \
+ eelf32ppcwindiss.o \
+ eelf32ppcvxworks.o \
+ eelf32vax.o \
+ eelf32xc16x.o \
+ eelf32xc16xl.o \
+ eelf32xc16xs.o \
+ eelf32xstormy16.o \
+ eelf32xtensa.o \
+ eelf_i386.o \
+ eelf_i386_be.o \
+ eelf_i386_chaos.o \
+ eelf_i386_fbsd.o \
+ eelf_i386_ldso.o \
+ eelf_i386_vxworks.o \
+ eelf_s390.o \
+ egld960.o \
+ egld960coff.o \
+ eh8300.o \
+ eh8300h.o \
+ eh8300s.o \
+ eh8300elf.o \
+ eh8300hn.o \
+ eh8300sn.o \
+ eh8300sx.o \
+ eh8300helf.o \
+ eh8300self.o \
+ eh8300hnelf.o \
+ eh8300snelf.o \
+ eh8300sxelf.o \
+ eh8300sxn.o \
+ eh8300sxnelf.o \
+ eh8500.o \
+ eh8500b.o \
+ eh8500c.o \
+ eh8500m.o \
+ eh8500s.o \
+ ehp300bsd.o \
+ ehp3hpux.o \
+ ehppaelf.o \
+ ehppalinux.o \
+ ehppanbsd.o \
+ ehppaobsd.o \
+ ei386aout.o \
+ ei386beos.o \
+ ei386bsd.o \
+ ei386coff.o \
+ ei386go32.o \
+ ei386linux.o \
+ ei386lynx.o \
+ ei386mach.o \
+ ei386moss.o \
+ ei386msdos.o \
+ ei386nbsd.o \
+ ei386nto.o \
+ ei386nw.o \
+ ei386pe.o \
+ ei386pe_posix.o \
+ elnk960.o \
+ em32relf.o \
+ em32rlelf.o \
+ em32relf_linux.o \
+ em32rlelf_linux.o \
+ em68hc11elf.o \
+ em68hc11elfb.o \
+ em68hc12elf.o \
+ em68hc12elfb.o \
+ em68k4knbsd.o \
+ em68kaout.o \
+ em68kaux.o \
+ em68kcoff.o \
+ em68kelf.o \
+ em68kelfnbsd.o \
+ em68klinux.o \
+ em68knbsd.o \
+ em68kpsos.o \
+ em88kbcs.o \
+ emaxqcoff.o \
+ emcorepe.o \
+ emipsbig.o \
+ emipsbsd.o \
+ emipsidt.o \
+ emipsidtl.o \
+ emipslit.o \
+ emipslnews.o \
+ emipspe.o \
+ emsp430x110.o \
+ emsp430x112.o \
+ emsp430x1101.o \
+ emsp430x1111.o \
+ emsp430x1121.o \
+ emsp430x1122.o \
+ emsp430x1132.o \
+ emsp430x122.o \
+ emsp430x123.o \
+ emsp430x1222.o \
+ emsp430x1232.o \
+ emsp430x133.o \
+ emsp430x135.o \
+ emsp430x1331.o \
+ emsp430x1351.o \
+ emsp430x147.o \
+ emsp430x148.o \
+ emsp430x149.o \
+ emsp430x155.o \
+ emsp430x156.o \
+ emsp430x157.o \
+ emsp430x167.o \
+ emsp430x168.o \
+ emsp430x169.o \
+ emsp430x1610.o \
+ emsp430x1611.o \
+ emsp430x1612.o \
+ emsp430x2101.o \
+ emsp430x2111.o \
+ emsp430x2121.o \
+ emsp430x2131.o \
+ emsp430x311.o \
+ emsp430x312.o \
+ emsp430x313.o \
+ emsp430x314.o \
+ emsp430x315.o \
+ emsp430x323.o \
+ emsp430x325.o \
+ emsp430x336.o \
+ emsp430x337.o \
+ emsp430x412.o \
+ emsp430x413.o \
+ emsp430x415.o \
+ emsp430x417.o \
+ emsp430xE423.o \
+ emsp430xE425.o \
+ emsp430xE427.o \
+ emsp430xW423.o \
+ emsp430xW425.o \
+ emsp430xW427.o \
+ emsp430xG437.o \
+ emsp430xG438.o \
+ emsp430xG439.o \
+ emsp430x435.o \
+ emsp430x436.o \
+ emsp430x437.o \
+ emsp430x447.o \
+ emsp430x448.o \
+ emsp430x449.o \
+ enews.o \
+ ens32knbsd.o \
+ eor32.o \
+ eor32elf.o \
+ epc532macha.o \
+ epdp11.o \
+ epjelf.o \
+ epjlelf.o \
+ eppcmacos.o \
+ eppcnw.o \
+ eppcpe.o \
+ eppclynx.o \
+ eriscix.o \
+ esh.o \
+ eshelf32.o \
+ eshlelf32.o \
+ eshelf32_linux.o \
+ eshlelf32_linux.o \
+ eshelf32_nbsd.o \
+ eshlelf32_nbsd.o \
+ eshelf.o \
+ eshelf_linux.o \
+ eshlelf_linux.o \
+ eshelf_nbsd.o \
+ eshlelf_nbsd.o \
+ eshelf_nto.o \
+ eshlelf_nto.o \
+ eshl.o \
+ eshlelf.o \
+ eshlsymbian.o \
+ eshpe.o \
+ esparcaout.o \
+ esparclinux.o \
+ esparcnbsd.o \
+ est2000.o \
+ esun3.o \
+ esun4.o \
+ etic30aout.o \
+ etic30coff.o \
+ etic3xcoff.o \
+ etic3xcoff_onchip.o \
+ etic4xcoff.o \
+ etic54xcoff.o \
+ etic80coff.o \
+ evanilla.o \
+ evax.o \
+ evaxnbsd.o \
+ evsta.o \
+ ew65.o \
+ ez8001.o \
+ eelf32frvfd.o \
+ ez80.o \
+ ez8002.o
+
+ALL_64_EMULATIONS = \
+ eelf64_aix.o \
+ eelf64_ia64.o \
+ eelf64_ia64_fbsd.o \
+ eshelf64.o \
+ eshlelf64.o \
+ eshelf64_nbsd.o \
+ eshlelf64_nbsd.o \
+ eelf_x86_64.o \
+ eelf_x86_64_fbsd.o \
+ eelf64_s390.o \
+ eelf64_sparc.o \
+ eelf64_sparc_fbsd.o \
+ eelf64alpha.o \
+ eelf64alpha_fbsd.o \
+ eelf64alpha_nbsd.o \
+ eelf64bmip.o \
+ eelf64btsmip.o \
+ eelf64ltsmip.o \
+ eelf64hppa.o \
+ eelf64mmix.o \
+ emmo.o \
+ eelf64ppc.o \
+ eelf64lppc.o \
+ ehppa64linux.o
+
+ALL_EMUL_EXTRA_OFILES = \
+ deffilep.o \
+ pe-dll.o
+
+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
+
+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 elf-hints-local.h
+
+GENERATED_CFILES = ldgram.c ldlex.c deffilep.c
+GENERATED_HFILES = ldgram.h ldemul-list.h deffilep.h
+OFILES = ldgram.o ldlex.o lexsup.o ldlang.o mri.o ldctor.o ldmain.o \
+ ldwrite.o ldexp.o ldemul.o ldver.o ldmisc.o \
+ ldfile.o ldcref.o ${EMULATION_OFILES} ${EMUL_EXTRA_OFILES}
+
+STAGESTUFF = *.o 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
+
+# We need this for automake to use YLWRAP.
+EXTRA_ld_new_SOURCES = deffilep.y
+ld_new_SOURCES = ldgram.y ldlex.l lexsup.c ldlang.c mri.c ldctor.c ldmain.c \
+ ldwrite.c ldexp.c ldemul.c ldver.c ldmisc.c ldfile.c ldcref.c
+
+ld_new_DEPENDENCIES = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(INTLDEPS)
+ld_new_LDADD = $(EMULATION_OFILES) $(EMUL_EXTRA_OFILES) $(BFDLIB) $(LIBIBERTY) $(INTLLIBS)
+MAINTAINERCLEANFILES = ldver.texi configdoc.texi
+
+# 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.o crtend.o ld.log ld.sum
+
+CLEANFILES = dep.sed DEP DEPA DEP1 DEP2
+html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+
+# 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 $(man_MANS)
+DISTCLEANFILES = tdirs site.exp site.bak stringify.sed
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .dvi .html .info .l .lo .o .obj .pdf .ps .texinfo .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 '; \
+ cd $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ 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)
+ cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) 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)
+ 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-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+ldgram.h: ldgram.c
+ @if test ! -f $@; then \
+ rm -f ldgram.c; \
+ $(MAKE) ldgram.c; \
+ else :; fi
+deffilep.h: deffilep.c
+ @if test ! -f $@; then \
+ rm -f deffilep.c; \
+ $(MAKE) deffilep.c; \
+ else :; fi
+ld-new$(EXEEXT): $(ld_new_OBJECTS) $(ld_new_DEPENDENCIES)
+ @rm -f ld-new$(EXEEXT)
+ $(LINK) $(ld_new_LDFLAGS) $(ld_new_OBJECTS) $(ld_new_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+.c.o:
+ $(COMPILE) -c $<
+
+.c.obj:
+ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ $(LTCOMPILE) -c -o $@ $<
+
+.l.c:
+ $(LEXCOMPILE) $<
+ sed '/^#/ s|$(LEX_OUTPUT_ROOT)\.c|$@|' $(LEX_OUTPUT_ROOT).c >$@
+ rm -f $(LEX_OUTPUT_ROOT).c
+
+.y.c:
+ $(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
+
+.texinfo.info:
+ restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ am__cwd=`pwd` && cd $(srcdir) && \
+ 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 && \
+ cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ $<; \
+ then \
+ rc=0; \
+ cd $(srcdir); \
+ else \
+ rc=$$?; \
+ cd $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+.texinfo.dvi:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $<
+
+.texinfo.pdf:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) $<
+
+.texinfo.html:
+ rm -rf $(@:.html=.htp)
+ if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) $<; \
+ 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
+ld.info: ld.texinfo
+ld.dvi: ld.texinfo
+ld.pdf: ld.texinfo
+ld.html: ld.texinfo
+.dvi.ps:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) -o $@ $<
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if (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'"; \
+ install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ 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 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
+
+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; \
+ for file in $$d/$$base*; do \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f $(distdir)/$$relfile || \
+ cp -p $$file $(distdir)/$$relfile; \
+ 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 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
+
+clean-info: mostlyclean-aminfo
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+
+# 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):
+ @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; \
+ (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"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @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; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (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; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ 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 || \
+ tags="$$tags $$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; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ 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; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && 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:
+ $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU
+check: check-recursive
+all-am: Makefile $(PROGRAMS) $(MANS) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: 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 -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 "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -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-man
+
+install-exec-am: install-exec-local
+
+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)'; \
+ 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 \
+ relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
+ echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
+ $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
+ else : ; fi; \
+ done; \
+ 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)'; \
+ 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
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -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-man
+
+uninstall-info: uninstall-info-recursive
+
+uninstall-man: uninstall-man1
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+ check-DEJAGNU check-am clean clean-generic clean-info \
+ clean-libtool clean-noinstPROGRAMS clean-recursive ctags \
+ ctags-recursive dist-info distclean distclean-DEJAGNU \
+ distclean-compile distclean-generic distclean-hdr \
+ distclean-libtool distclean-local distclean-recursive \
+ distclean-tags dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-data-local \
+ install-exec install-exec-am install-exec-local install-info \
+ install-info-am install-man install-man1 install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-recursive \
+ mostlyclean mostlyclean-aminfo mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-local \
+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am uninstall-man \
+ uninstall-man1
+
+
+# Disable -Werror, if it has been enabled, since old versions of bison/
+# yacc will produce working code which contain compile time warnings.
+ldgram.o:
+ $(COMPILE) -c $< $(NO_WERROR)
+ldlex.o:
+ $(COMPILE) -c $< $(NO_WERROR)
+deffilep.o:
+ $(COMPILE) -c $< $(NO_WERROR)
+
+po/POTFILES.in: @MAINT@ Makefile
+ for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \
+ && mv tmp $(srcdir)/po/POTFILES.in
+
+ldmain.o: ldmain.c config.status
+ $(COMPILE) -c -DDEFAULT_EMULATION='"$(EMUL)"' \
+ -DSCRIPTDIR='"$(scriptdir)"' -DBINDIR='"$(bindir)"' \
+ -DTOOLBINDIR='"$(tooldir)/bin"' \
+ -DTARGET='"@target@"' @TARGET_SYSTEM_ROOT_DEFINE@ \
+ $(srcdir)/ldmain.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)"
+earcelf.c: $(srcdir)/emulparams/arcelf.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} arcelf "$(tdir_arcelf)"
+earmelf.c: $(srcdir)/emulparams/armelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf "$(tdir_armelf)"
+earmelfb.c: $(srcdir)/emulparams/armelfb.sh $(srcdir)/emulparams/armelf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/armelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} armelf_fbsd "$(tdir_armelf_fbsd)"
+earmelf_linux.c: $(srcdir)/emulparams/armelf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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)"
+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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/emultempl/armelf.em $(srcdir)/scripttempl/armbpabi.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} armsymbian "$(tdir_armelf)"
+eavr2.c: $(srcdir)/emulparams/avr2.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr2 "$(tdir_avr2)"
+eavr1.c: $(srcdir)/emulparams/avr1.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr1 "$(tdir_avr2)"
+eavr3.c: $(srcdir)/emulparams/avr3.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr3 "$(tdir_avr2)"
+eavr4.c: $(srcdir)/emulparams/avr4.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr4 "$(tdir_avr2)"
+eavr5.c: $(srcdir)/emulparams/avr5.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/avr.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} avr5 "$(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} criself "$(tdir_cris)"
+ecrislinux.c: $(srcdir)/emulparams/crislinux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} crislinux "$(tdir_cris)"
+ed10velf.c: $(srcdir)/emulparams/d10velf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfd10v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d10velf "$(tdir_d10v)"
+ed30velf.c: $(srcdir)/emulparams/d30velf.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30velf "$(tdir_d30v)"
+ed30v_o.c: $(srcdir)/emulparams/d30v_o.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elfd30v.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} d30v_o "$(tdir_d30v)"
+ed30v_e.c: $(srcdir)/emulparams/d30v_e.sh \
+ $(srcdir)/emultempl/generic.em $(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 \
+ $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bfin "$(tdir_elf32bfin)" bfin
+eelf32bfinfd.c: $(srcdir)/emulparams/elf32bfinfd.sh $(srcdir)/emulparams/bfin.sh \
+ $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bfinfd "$(tdir_elf32bfinfd)" elf32bfinfd
+eelf32_dlx.c: $(srcdir)/emulparams/elf32_dlx.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/dlx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_dlx "$(tdir_elf32_dlx)"
+eelf32xc16x.c: $(srcdir)/emulparams/elf32xc16x.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16x "$(tdir_xc16x)"
+eelf32xc16xl.c: $(srcdir)/emulparams/elf32xc16xl.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16xl "$(tdir_xc16xl)"
+eelf32xc16xs.c: $(srcdir)/emulparams/elf32xc16xs.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xc16xs "$(tdir_xc16xs)"
+eelf32xstormy16.c: $(srcdir)/emulparams/elf32xstormy16.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/xstormy16.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32xstormy16 "$(tdir_xstormy16)"
+eelf32am33lin.c: $(srcdir)/emulparams/elf32am33lin.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32am33lin "$(tdir_mn10300)"
+eelf32vax.c: $(srcdir)/emulparams/elf32vax.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32vax "$(tdir_elf32vax)"
+eelf32xtensa.c: $(srcdir)/emulparams/elf32xtensa.sh \
+ $(srcdir)/emulparams/xtensa-config.sh $(srcdir)/emultempl/elf32.em \
+ $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32fr30 "$(tdir_fr30)"
+eelf32frv.c: $(srcdir)/emulparams/elf32frv.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frv "$(tdir_frv)"
+eelf32mcore.c: $(srcdir)/emulparams/elf32mcore.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mcore "$(tdir_mcore)"
+em32relf.c: $(srcdir)/emulparams/m32relf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32relf "$(tdir_m32r)"
+em32rlelf.c: $(srcdir)/emulparams/m32rlelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32rlelf "$(tdir_m32rlelf)"
+em32relf_linux.c: $(srcdir)/emulparams/m32relf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32relf_linux "$(tdir_m32relf_linux)"
+em32rlelf_linux.c: $(srcdir)/emulparams/m32rlelf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m32rlelf_linux "$(tdir_m32rlelf_linux)"
+eelf32_sparc.c: $(srcdir)/emulparams/elf32_sparc.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc "$(tdir_elf32_sparc)"
+eelf32_sparc_vxworks.c: $(srcdir)/emulparams/elf32_sparc_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emulparams/elf32_sparc.sh \
+ $(srcdir)/emultempl/vxworks.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_sparc_vxworks "$(tdir_elf32_sparc_vxworks)"
+eelf32_i860.c: $(srcdir)/emulparams/elf32_i860.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_i860 "$(tdir_elf32_i860)"
+eelf32_i960.c: $(srcdir)/emulparams/elf32_i960.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32_i960 "$(tdir_elf32_i960)"
+eelf32b4300.c: $(srcdir)/emulparams/elf32b4300.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32b4300 "$(tdir_elf32b4300)"
+eelf32cr16c.c: $(srcdir)/emulparams/elf32cr16c.sh \
+ $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf32cr16c.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32cr16c "$(tdir_elf32cr16c)"
+eelf32bmip.c: $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bmip "$(tdir_elf32bmip)"
+eelf32bsmip.c: $(srcdir)/emulparams/elf32bsmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32bsmip "$(tdir_elf32bsmip)"
+eelf32btsmip.c: $(srcdir)/emulparams/elf32btsmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32btsmip "$(tdir_elf32btsmip)"
+eelf32crx.c: $(srcdir)/emulparams/elf32crx.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/crxelf.em \
+ $(srcdir)/scripttempl/elf32crx.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32crx "$(tdir_elf32crx)"
+eelf32btsmipn32.c: $(srcdir)/emulparams/elf32btsmipn32.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ltsmip "$(tdir_elf32ltsmip)"
+eelf32ltsmipn32.c: $(srcdir)/emulparams/elf32ltsmipn32.sh \
+ $(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ltsmipn32 "$(tdir_elf32ltsmipn32)"
+eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ebmip "$(tdir_elf32ebmip)"
+eelf32ebmipvxworks.c: $(srcdir)/emulparams/elf32ebmipvxworks.sh \
+ $(srcdir)/emulparams/elf32ebmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(srcdir)/emultempl/elf32.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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32elmip "$(tdir_elf32elmip)"
+eelf32elmipvxworks.c: $(srcdir)/emulparams/elf32elmipvxworks.sh \
+ $(srcdir)/emulparams/elf32elmip.sh $(srcdir)/emulparams/vxworks.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/vxworks.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32elmipvxworks "$(tdir_elf32elmipvxworks)"
+eelf32bmipn32.c: $(srcdir)/emulparams/elf32bmipn32.sh \
+ $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/elf32.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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32l4300 "$(tdir_elf32l4300)"
+eelf32lmip.c: $(srcdir)/emulparams/elf32lmip.sh \
+ $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lmip "$(tdir_elf32lmip)"
+eelf32mipswindiss.c: $(srcdir)/emulparams/elf32mipswindiss.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mipswindiss "$(tdir_elf32mipswindiss)"
+eelf32lppc.c: $(srcdir)/emulparams/elf32lppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh \
+ $(srcdir)/emulparams/elf32ppc.sh $(srcdir)/emultempl/ppc32elf.em \
+ $(srcdir)/emultempl/elf32.em $(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 $(srcdir)/emultempl/elf32.em \
+ $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcnto "$(tdir_elf32ppcnto)"
+eelf32ppcwindiss.c: $(srcdir)/emulparams/elf32ppcwindiss.sh \
+ $(srcdir)/emultempl/elf32.em $(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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppcvxworks "$(tdir_elf32ppcvxworks)"
+eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \
+ $(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32lsmip "$(tdir_elf32lsmip)"
+eelf32openrisc.c: $(srcdir)/emulparams/elf32openrisc.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32openrisc "$(tdir_openrisc)"
+eelf32ppc.c: $(srcdir)/emulparams/elf32ppc.sh \
+ $(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emultempl/ppc32elf.em \
+ $(srcdir)/emultempl/elf32.em $(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 $(srcdir)/emultempl/elf32.em \
+ $(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 $(srcdir)/emultempl/elf32.em \
+ $(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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ppclinux "$(tdir_elf32ppclinux)"
+eelf64ppc.c: $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64ppc "$(tdir_elf64ppc)"
+eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
+ $(srcdir)/emulparams/elf64ppc.sh $(srcdir)/emultempl/ppc64elf.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64lppc "$(tdir_elf64lppc)"
+eelf32i370.c: $(srcdir)/emulparams/elf32i370.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfi370.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32i370 "$(tdir_elf32i370)"
+eelf32ip2k.c: $(srcdir)/emulparams/elf32ip2k.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/ip2k.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ip2k "$(tdir_ip2k)"
+eelf32iq2000.c: $(srcdir)/emulparams/elf32iq2000.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32iq2000 "$(tdir_iq2000)"
+eelf32iq10.c: $(srcdir)/emulparams/elf32iq10.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/iq2000.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32iq10 "$(tdir_iq10)"
+eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/alphaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64alpha_nbsd "$(tdir_elf64alpha_nbsd)"
+eelf64hppa.c: $(srcdir)/emulparams/elf64hppa.sh \
+ $(srcdir)/emulparams/hppa64linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64hppa "$(tdir_elf64hppa)"
+eelf64_aix.c: $(srcdir)/emulparams/elf64_aix.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_aix "$(tdir_elf64_aix)"
+eelf64_ia64.c: $(srcdir)/emulparams/elf64_ia64.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_s390 "$(tdir_elf64_s390)"
+eelf64_sparc.c: $(srcdir)/emulparams/elf64_sparc.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64_sparc_fbsd "$(tdir_elf64_sparc_fbsd)"
+eelf64bmip.c: $(srcdir)/emulparams/elf64bmip.sh \
+ $(srcdir)/emulparams/elf32bmipn32.sh $(srcdir)/emultempl/irix.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64bmip "$(tdir_elf64bmip)"
+eelf64mmix.c: $(srcdir)/emulparams/elf64mmix.sh \
+ $(srcdir)/emultempl/elf32.em $(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/mmo.em \
+ $(srcdir)/scripttempl/mmo.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mmo "$(tdir_mmo)"
+eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \
+ $(srcdir)/emulparams/elf32bmipn32.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)"
+eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \
+ $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf32bmipn32.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)"
+eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)"
+eelf_x86_64.c: $(srcdir)/emulparams/elf_x86_64.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_x86_64_fbsd "$(tdir_elf_x86_64_fbsd)"
+eelf_i386_be.c: $(srcdir)/emulparams/elf_i386_be.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_be "$(tdir_elf_i386_be)"
+eelf_i386_chaos.c: $(srcdir)/emulparams/elf_i386_chaos.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_fbsd "$(tdir_elf_i386_fbsd)"
+eelf_i386_ldso.c: $(srcdir)/emulparams/elf_i386_ldso.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_ldso "$(tdir_elf_i386_ldso)"
+eelf_i386_vxworks.c: $(srcdir)/emulparams/elf_i386_vxworks.sh \
+ $(srcdir)/emulparams/vxworks.sh $(srcdir)/emultempl/vxworks.em \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf_i386_vxworks "$(tdir_elf_i386_vxworks)"
+eelf_s390.c: $(srcdir)/emulparams/elf_s390.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300elf "$(tdir_h8300elf)"
+eh8300helf.c: $(srcdir)/emulparams/h8300helf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300helf "$(tdir_h8300helf)"
+eh8300self.c: $(srcdir)/emulparams/h8300self.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300self "$(tdir_h8300self)"
+eh8300hnelf.c: $(srcdir)/emulparams/h8300hnelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300hnelf "$(tdir_h8300hnelf)"
+eh8300snelf.c: $(srcdir)/emulparams/h8300snelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300snelf "$(tdir_h8300snelf)"
+eh8300sxelf.c: $(srcdir)/emulparams/h8300sxelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} h8300sxelf "$(tdir_h8300sxelf)"
+eh8300sxnelf.c: $(srcdir)/emulparams/h8300sxnelf.sh \
+ $(srcdir)/emulparams/h8300elf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/hppaelf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppaelf "$(tdir_hppaelf)"
+ehppalinux.c: $(srcdir)/emulparams/hppalinux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppalinux "$(tdir_hppalinux)"
+ehppanbsd.c: $(srcdir)/emulparams/hppanbsd.sh \
+ $(srcdir)/emulparams/hppaelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppanbsd "$(tdir_hppanbsd)"
+ehppaobsd.c: $(srcdir)/emulparams/hppaobsd.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/hppaelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} hppaobsd "$(tdir_hppaobsd)"
+ehppa64linux.c: $(srcdir)/emulparams/hppa64linux.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} i386nto "$(tdir_i386nto)"
+ei386nw.c: $(srcdir)/emulparams/i386nw.sh \
+ $(srcdir)/emultempl/elf32.em $(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)"
+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 $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc11elf "$(tdir_m68hc11)"
+em68hc11elfb.c: $(srcdir)/emulparams/m68hc11elfb.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elfm68hc11.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc11elfb "$(tdir_m68hc11b)"
+em68hc12elf.c: $(srcdir)/emulparams/m68hc12elf.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(srcdir)/scripttempl/elfm68hc12.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68hc12elf "$(tdir_m68hc12)"
+em68hc12elfb.c: $(srcdir)/emulparams/m68hc12elfb.sh \
+ $(srcdir)/emultempl/m68hc1xelf.em $(srcdir)/emultempl/elf32.em \
+ $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/m68kelf.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} m68kelf "$(tdir_m68kelf)"
+em68kelfnbsd.c: $(srcdir)/emulparams/m68kelfnbsd.sh \
+ $(srcdir)/emulparams/m68kelf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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)"
+emaxqcoff.c: $(srcdir)/emulparams/maxqcoff.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/maxqcoff.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} maxqcoff "$(tdir_maxqcoff)"
+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
+emipsbsd.c: $(srcdir)/emulparams/mipsbsd.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/mipsbsd.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsbsd
+emipsidt.c: $(srcdir)/emulparams/mipsidt.sh \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/emultempl/generic.em \
+ $(srcdir)/scripttempl/mips.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipsidt "$(tdir_mipsidt)"
+emipsidtl.c: $(srcdir)/emulparams/mipsidtl.sh \
+ $(srcdir)/emultempl/mipsecoff.em $(srcdir)/emultempl/generic.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
+emipspe.c: $(srcdir)/emulparams/mipspe.sh \
+ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/pe.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mipspe "$(tdir_mips)"
+emn10300.c: $(srcdir)/emulparams/mn10300.sh \
+ $(srcdir)/emulparams/mn10200.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mn10300 "$(tdir_mn10300)"
+emn10200.c: $(srcdir)/emulparams/mn10200.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} mn10200 "$(tdir_mn10200)"
+emsp430x110.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x110 "$(tdir_msp430x110)" msp430all
+emsp430x112.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x112 "$(tdir_msp430x112)" msp430all
+emsp430x1101.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1101 "$(tdir_msp430x1101)" msp430all
+emsp430x1111.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1111 "$(tdir_msp430x1111)" msp430all
+emsp430x1121.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1121 "$(tdir_msp430x1121)" msp430all
+emsp430x1122.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1122 "$(tdir_msp430x1122)" msp430all
+emsp430x1132.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1132 "$(tdir_msp430x1132)" msp430all
+emsp430x122.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x122 "$(tdir_msp430x122)" msp430all
+emsp430x123.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x123 "$(tdir_msp430x123)" msp430all
+emsp430x1222.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1222 "$(tdir_msp430x1222)" msp430all
+emsp430x1232.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1232 "$(tdir_msp430x1232)" msp430all
+emsp430x133.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x133 "$(tdir_msp430x133)" msp430all
+emsp430x135.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x135 "$(tdir_msp430x135)" msp430all
+emsp430x1331.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1331 "$(tdir_msp430x1331)" msp430all
+emsp430x1351.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1351 "$(tdir_msp430x1351)" msp430all
+emsp430x147.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x147 "$(tdir_msp430x147)" msp430all
+emsp430x148.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x148 "$(tdir_msp430x148)" msp430all
+emsp430x149.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x149 "$(tdir_msp430x149)" msp430all
+emsp430x155.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x155 "$(tdir_msp430x155)" msp430all
+emsp430x156.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x156 "$(tdir_msp430x156)" msp430all
+emsp430x157.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x157 "$(tdir_msp430x157)" msp430all
+emsp430x167.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x167 "$(tdir_msp430x167)" msp430all
+emsp430x168.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x168 "$(tdir_msp430x168)" msp430all
+emsp430x169.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x169 "$(tdir_msp430x169)" msp430all
+emsp430x1610.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1610 "$(tdir_msp430x1610)" msp430all
+emsp430x1611.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1611 "$(tdir_msp430x1611)" msp430all
+emsp430x1612.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x1612 "$(tdir_msp430x1612)" msp430all
+emsp430x2101.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2101 "$(tdir_msp430x2101)" msp430all
+emsp430x2111.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2111 "$(tdir_msp430x2111)" msp430all
+emsp430x2121.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2121 "$(tdir_msp430x2121)" msp430all
+emsp430x2131.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x2131 "$(tdir_msp430x2131)" msp430all
+emsp430x311.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x311 "$(tdir_msp430x311)" msp430all
+emsp430x312.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x312 "$(tdir_msp430x312)" msp430all
+emsp430x313.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x313 "$(tdir_msp430x313)" msp430all
+emsp430x314.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x314 "$(tdir_msp430x314)" msp430all
+emsp430x315.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x315 "$(tdir_msp430x315)" msp430all
+emsp430x323.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x323 "$(tdir_msp430x323)" msp430all
+emsp430x325.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x325 "$(tdir_msp430x325)" msp430all
+emsp430x336.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x336 "$(tdir_msp430x336)" msp430all
+emsp430x337.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430_3.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x337 "$(tdir_msp430x337)" msp430all
+emsp430x412.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x412 "$(tdir_msp430x412)" msp430all
+emsp430x413.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x413 "$(tdir_msp430x413)" msp430all
+emsp430x415.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x415 "$(tdir_msp430x415)" msp430all
+emsp430x417.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x417 "$(tdir_msp430x417)" msp430all
+emsp430xE423.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE423 "$(tdir_msp430xE423)" msp430all
+emsp430xE425.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE425 "$(tdir_msp430xE425)" msp430all
+emsp430xE427.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xE427 "$(tdir_msp430xE427)" msp430all
+emsp430xW423.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW423 "$(tdir_msp430xW423)" msp430all
+emsp430xW425.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW425 "$(tdir_msp430xW425)" msp430all
+emsp430xW427.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xW427 "$(tdir_msp430xW427)" msp430all
+emsp430xG437.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG437 "$(tdir_msp430xG437)" msp430all
+emsp430xG438.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG438 "$(tdir_msp430xG438)" msp430all
+emsp430xG439.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430xG439 "$(tdir_msp430xG439)" msp430all
+emsp430x435.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x435 "$(tdir_msp430x435)" msp430all
+emsp430x436.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x436 "$(tdir_msp430x436)" msp430all
+emsp430x437.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x437 "$(tdir_msp430x437)" msp430all
+emsp430x447.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x447 "$(tdir_msp430x447)" msp430all
+emsp430x448.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/elf32msp430.sc \
+ ${GEN_DEPENDS}
+ ${GENSCRIPTS} msp430x448 "$(tdir_msp430x448)" msp430all
+emsp430x449.c: $(srcdir)/emulparams/msp430all.sh \
+ $(srcdir)/emultempl/generic.em $(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 \
+ $(srcdir)/emultempl/generic.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pjelf "$(tdir_pjelf)"
+epjlelf.c: $(srcdir)/emulparams/pjlelf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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)"
+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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf32_nbsd "$(tdir_shelf32_nbsd)"
+eshelf64.c: $(srcdir)/emulparams/shelf64.sh $(srcdir)/emulparams/shelf32.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf64_nbsd "$(tdir_shelf64_nbsd)"
+eshelf_linux.c: $(srcdir)/emulparams/shelf_linux.sh \
+ $(srcdir)/emulparams/shlelf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_linux "$(tdir_shelf_linux)"
+eshlelf_linux.c: $(srcdir)/emulparams/shlelf_linux.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_linux "$(tdir_shlelf_linux)"
+eshelf_nbsd.c: $(srcdir)/emulparams/shelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_nbsd "$(tdir_shelf_nbsd)"
+eshelf_nto.c: $(srcdir)/emulparams/shelf_nto.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shelf_nto "$(tdir_shelf_nto)"
+eshlelf_nbsd.c: $(srcdir)/emulparams/shlelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf_nbsd.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_nbsd "$(tdir_shlelf_nbsd)"
+eshlelf_nto.c: $(srcdir)/emulparams/shlelf_nto.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf_nto "$(tdir_shlelf_nto)"
+eshlelf.c: $(srcdir)/emulparams/shlelf.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} shlelf "$(tdir_shlelf)"
+eshlsymbian.c: $(srcdir)/emulparams/shlsymbian.sh \
+ $(srcdir)/emulparams/shelf.sh \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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 \
+ $(srcdir)/emultempl/elf32.em $(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)"
+eelf32frvfd.c: $(srcdir)/emulparams/elf32frvfd.sh \
+ $(srcdir)/emulparams/elf32frv.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32frvfd "$(tdir_frv)"
+eelf32m32c.c: $(srcdir)/emulparams/elf32m32c.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
+ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32m32c "$(tdir_m32c)"
+eelf32mt.c: $(srcdir)/emulparams/elf32mt.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32mt "$(tdir_mt)"
+
+# The generated emulation files mostly have the same dependencies.
+$(EMULATION_OFILES): ../bfd/bfd.h sysdep.h config.h $(INCDIR)/bfdlink.h \
+ ld.h ldmain.h ldemul.h ldfile.h ldmisc.h ldexp.h ldlang.h \
+ ldctor.h ldexp.h ldlang.h ldgram.h
+
+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) $(INTLLIBS)" LIBS="$(LIBS)" \
+ $(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.o: ld-new$(EXEEXT)
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld-partial.o -r $(OFILES)
+ld1$(EXEEXT): ld-partial.o
+ ./ld-new$(EXEEXT) $(HOSTING_EMU) -o ld1$(EXEEXT) $(HOSTING_CRT0) ld-partial.o $(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.o cdtest-bar.o cdtest-foo.o ld.new
+# ./ld.new $(HOSTING_EMU) -o cdtest $(HOSTING_CRT0) \
+# cdtest-main.o cdtest-bar.o cdtest-foo.o $(HOSTING_LIBS)
+#
+#cdtest.out: cdtest
+# ./cdtest > cdtest.tmp
+# mv cdtest.tmp cdtest.out
+#
+#cdtest-ur.o: cdtest-main.o cdtest-bar.o cdtest-foo.o ld.new
+# ./ld.new $(HOSTING_EMU) -o cdtest-ur.o -Ur cdtest-main.o \
+# cdtest-bar.o cdtest-foo.o
+#
+#cdtest-ur: cdtest-ur.o
+# ./ld.new $(HOSTING_EMU) -o cdtest-ur $(HOSTING_CRT0) cdtest-ur.o \
+# $(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
+
+# 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
+
+ldver.texi: $(srcdir)/../bfd/configure
+ rm -f $@
+ eval `grep '^ *VERSION=' $(srcdir)/../bfd/configure`; \
+ echo "@set VERSION $$VERSION" > $@
+
+ld.info ld.dvi ld.html: $(srcdir)/ld.texinfo configdoc.texi ldver.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 ldver.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-html install-html-am install-html-recursive
+
+install-html: install-html-recursive install-html-am
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)"
+ @list='$(HTMLS)'; for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
+ f=$(html__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"; \
+ else \
+ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
+ fi; \
+ done
+
+install-html-recursive:
+ @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; \
+ (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"
+
+.PHONY: install-exec-local install-data-local
+
+install-exec-local: ld-new$(EXEEXT)
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(tooldir)/bin
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed -e 's/$(EXEEXT)$$//' -e 's/-new//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed -e 's/$(EXEEXT)$$//' -e 's/-new//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ else :; fi; \
+ done
+ n=`echo ld | sed '$(transform)'`; \
+ if [ "$(bindir)/$$n$(EXEEXT)" != "$(tooldir)/bin/ld$(EXEEXT)" ]; 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
+
+install-data-local:
+ $(mkinstalldirs) $(DESTDIR)$(scriptdir)/ldscripts
+ for f in ldscripts/*; do \
+ $(INSTALL_DATA) $$f $(DESTDIR)$(scriptdir)/$$f ; \
+ done
+
+# We want install to imply install-info as per GNU standards, despite the
+# cygnus option.
+install-data-local: install-info
+diststuff: info $(EXTRA_DIST)
+all: info ld.1
+
+# Both info (ld.info) and ld.1 depend on configdoc.texi and ldver.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
+
+# Targets to rebuild dependencies in this Makefile.
+# Have to get rid of DEP1 here so that "$?" later includes all of $(CFILES).
+DEP: dep.sed $(CFILES) $(HFILES) $(GENERATED_CFILES) $(GENERATED_HFILES) config.h
+ rm -f DEP1
+ $(MAKE) MKDEP="$(MKDEP)" DEP1
+ sed -f dep.sed < DEP1 > DEPA
+ echo '# IF YOU PUT ANYTHING HERE IT WILL GO AWAY' >> DEPA
+ if grep ' /' DEPA > /dev/null 2> /dev/null; then \
+ echo 'make DEP failed!'; exit 1; \
+ else \
+ mv -f DEPA $@; \
+ fi
+
+DEP1: $(CFILES) $(GENERATED_CFILES)
+ echo '# DO NOT DELETE THIS LINE -- mkdep uses it.' > DEP2
+ echo '# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.' >> DEP2
+ $(MKDEP) $(INCLUDES) $(CFLAGS) $? >> DEP2
+ mv -f DEP2 $@
+
+dep.sed: dep-in.sed config.status
+ sed <$(srcdir)/dep-in.sed >dep.sed \
+ -e 's!@INCDIR@!$(INCDIR)!' \
+ -e 's!@BFDDIR@!$(BFDDIR)!' \
+ -e 's!@SRCDIR@!$(srcdir)!' \
+ -e 's!@TOPDIR@!'`echo $(srcdir) | sed -e s,/ld$$,,`'!'
+
+dep: DEP
+ sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < Makefile > tmp-Makefile
+ cat DEP >> tmp-Makefile
+ $(srcdir)/../move-if-change tmp-Makefile Makefile
+
+dep-in: DEP
+ sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.in > tmp-Makefile.in
+ cat DEP >> tmp-Makefile.in
+ $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in
+
+dep-am: DEP
+ sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.am > tmp-Makefile.am
+ cat DEP >> tmp-Makefile.am
+ $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am
+
+.PHONY: dep dep-in dep-am
+
+# What appears below is generated by a hacked mkdep using gcc -MM.
+
+# DO NOT DELETE THIS LINE -- mkdep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
+ldctor.o: ldctor.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h ld.h $(INCDIR)/bin-bugs.h \
+ ldexp.h ldlang.h ldmisc.h ldgram.h ldmain.h ldctor.h
+ldemul.o: ldemul.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldmisc.h \
+ ldexp.h ldlang.h ldfile.h ldemul.h ldmain.h ldemul-list.h
+ldexp.o: ldexp.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldmain.h \
+ ldmisc.h ldexp.h ldgram.h ldlang.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/safe-ctype.h
+ldfile.o: ldfile.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmisc.h ldexp.h ldlang.h ldfile.h ldmain.h ldgram.h \
+ ldlex.h ldemul.h $(INCDIR)/libiberty.h $(INCDIR)/filenames.h
+ldlang.o: ldlang.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(INCDIR)/obstack.h \
+ $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldmain.h \
+ ldexp.h ldlang.h ldgram.h ldlex.h ldmisc.h ldctor.h \
+ ldfile.h ldemul.h $(INCDIR)/fnmatch.h $(INCDIR)/demangle.h \
+ $(INCDIR)/hashtab.h
+ldmain.o: ldmain.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/libiberty.h $(INCDIR)/progress.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/filenames.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmain.h ldmisc.h ldwrite.h ldexp.h ldlang.h ldgram.h \
+ ldlex.h ldfile.h ldemul.h ldctor.h
+ldmisc.o: ldmisc.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h sysdep.h config.h \
+ $(INCDIR)/fopen-same.h $(INCDIR)/libiberty.h $(INCDIR)/demangle.h \
+ ld.h $(INCDIR)/bin-bugs.h ldmisc.h ldexp.h ldlang.h \
+ ldgram.h ldlex.h ldmain.h ldfile.h $(BFDDIR)/elf-bfd.h \
+ $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h
+ldver.o: ldver.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h ../bfd/bfdver.h sysdep.h config.h \
+ $(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h ldver.h \
+ ldexp.h ldlang.h ldfile.h ldemul.h ldmain.h
+ldwrite.o: ldwrite.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
+ ld.h $(INCDIR)/bin-bugs.h ldexp.h ldlang.h ldwrite.h \
+ ldmisc.h ldgram.h ldmain.h
+lexsup.o: lexsup.c config.h ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h \
+ ld.h $(INCDIR)/bin-bugs.h ldmain.h ldmisc.h ldexp.h \
+ ldlang.h ldgram.h ldlex.h ldfile.h ldver.h ldemul.h \
+ $(INCDIR)/demangle.h
+mri.o: mri.c ../bfd/bfd.h $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
+ sysdep.h config.h $(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h \
+ ldexp.h ldlang.h ldmisc.h mri.h ldgram.h $(INCDIR)/libiberty.h
+ldcref.o: ldcref.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmain.h ldmisc.h ldexp.h ldlang.h
+pe-dll.o: pe-dll.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h \
+ ld.h $(INCDIR)/bin-bugs.h ldexp.h ldlang.h ldwrite.h \
+ ldmisc.h ldgram.h ldmain.h ldfile.h ldemul.h $(INCDIR)/coff/internal.h \
+ $(BFDDIR)/libcoff.h deffile.h pe-dll.h
+ldgram.o: ldgram.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h ldexp.h \
+ ldver.h ldlang.h ldfile.h ldemul.h ldmisc.h ldmain.h \
+ mri.h ldctor.h ldlex.h
+ldlex.o: ldlex.c ../bfd/bfd.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/symcat.h sysdep.h config.h $(INCDIR)/fopen-same.h \
+ $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmisc.h ldexp.h ldlang.h ldgram.h ldfile.h ldlex.h \
+ ldmain.h $(INCDIR)/libiberty.h
+deffilep.o: deffilep.c $(INCDIR)/libiberty.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h ../bfd/bfd.h $(INCDIR)/symcat.h \
+ sysdep.h config.h $(INCDIR)/fopen-same.h ld.h $(INCDIR)/bin-bugs.h \
+ ldmisc.h deffile.h
+# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
+# 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.17/ld/NEWS b/binutils-2.17/ld/NEWS
new file mode 100644
index 00000000..27fb0ae1
--- /dev/null
+++ b/binutils-2.17/ld/NEWS
@@ -0,0 +1,372 @@
+-*- text -*-
+
+* 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.
+
+* 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.17/ld/README b/binutils-2.17/ld/README
new file mode 100644
index 00000000..a953e422
--- /dev/null
+++ b/binutils-2.17/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.17/ld/TODO b/binutils-2.17/ld/TODO
new file mode 100644
index 00000000..31cd98ba
--- /dev/null
+++ b/binutils-2.17/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.17/ld/acinclude.m4 b/binutils-2.17/ld/acinclude.m4
new file mode 100644
index 00000000..71b09b9f
--- /dev/null
+++ b/binutils-2.17/ld/acinclude.m4
@@ -0,0 +1 @@
+sinclude(../bfd/acinclude.m4)
diff --git a/binutils-2.17/ld/aclocal.m4 b/binutils-2.17/ld/aclocal.m4
new file mode 100644
index 00000000..cd426733
--- /dev/null
+++ b/binutils-2.17/ld/aclocal.m4
@@ -0,0 +1,913 @@
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 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.
+
+# 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.
+
+# Copyright (C) 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.
+
+# 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.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.9.6])])
+
+# 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
+# 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 7
+
+# 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])
+AC_SUBST([$1_FALSE])
+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
+# 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 8
+
+# 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], 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
+ 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
+
+ case $depmode in
+ 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
+ ;;
+ none) break ;;
+ esac
+ # 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.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} 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])
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 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 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # 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.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /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"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 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.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 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 12
+
+# 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.58])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
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+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
+ 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)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+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
+])
+])
+
+
+# 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_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# 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_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 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 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[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
+AC_SUBST([am__leading_dot])])
+
+# 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
+# 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
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ 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 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 3
+
+# 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 done
+.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
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+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, 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 4
+
+# 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
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# 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 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 whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+#
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake. There are at least two reasons why we must not
+# use `-m 0755':
+# - it causes special bits like SGID to be ignored,
+# - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out. Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ # We used to keeping the `.' as first argument, in order to
+ # allow $(mkdir_p) to be used without argument. As in
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined. However this is wrong
+ # for two reasons:
+ # 1. if the package is installed by a user who cannot write `.'
+ # make install will fail,
+ # 2. the above comment should most certainly read
+ # $(mkdir_p) $(DESTDIR)$(somedir)
+ # so it does not work when $(somedir) is undefined and
+ # $(DESTDIR) is not.
+ # To support the latter case, we have to write
+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+ # so the `.' trick is pointless.
+ mkdir_p='mkdir -p --'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--version;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 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 3
+
+# _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],
+[AC_FOREACH([_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
+# 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_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# 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([acinclude.m4])
diff --git a/binutils-2.17/ld/config.in b/binutils-2.17/ld/config.in
new file mode 100644
index 00000000..fa2e69fe
--- /dev/null
+++ b/binutils-2.17/ld/config.in
@@ -0,0 +1,222 @@
+/* config.in. Generated from configure.in by autoheader. */
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+ systems. This function is required for `alloca.c' support on those systems.
+ */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define to 1 if NLS is requested */
+#undef ENABLE_NLS
+
+/* Additional extension a shared object might have. */
+#undef EXTRA_SHLIB_EXTENSION
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+ */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the <argz.h> header file. */
+#undef HAVE_ARGZ_H
+
+/* Define to 1 if you have the `dcgettext' function. */
+#undef HAVE_DCGETTEXT
+
+/* 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 <elf-hints.h> header file. */
+#undef HAVE_ELF_HINTS_H
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define as 1 if you have gettext and don't want to use GNU gettext. */
+#undef HAVE_GETTEXT
+
+/* 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 if your locale.h file contains LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* 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 <nl_types.h> header file. */
+#undef HAVE_NL_TYPES_H
+
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* 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 `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* 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 if you have the stpcpy function */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* 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/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/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 <values.h> header file. */
+#undef HAVE_VALUES_H
+
+/* Define to 1 if you have the `__argz_count' function. */
+#undef HAVE___ARGZ_COUNT
+
+/* Define to 1 if you have the `__argz_next' function. */
+#undef HAVE___ARGZ_NEXT
+
+/* Define to 1 if you have the `__argz_stringify' function. */
+#undef HAVE___ARGZ_STRINGIFY
+
+/* 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 version of this package. */
+#undef PACKAGE_VERSION
+
+/* If using the C implementation of alloca, define if you know the
+ direction of stack growth for your system; otherwise it will be
+ automatically deduced at run-time.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* 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
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+ `char[]'. */
+#undef YYTEXT_POINTER
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `long' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/binutils-2.17/ld/configdoc.texi b/binutils-2.17/ld/configdoc.texi
new file mode 100644
index 00000000..800f64e2
--- /dev/null
+++ b/binutils-2.17/ld/configdoc.texi
@@ -0,0 +1,22 @@
+@c ------------------------------ CONFIGURATION VARS:
+@c 1. Inclusiveness of this manual
+@set GENERIC
+
+@c 2. Specific target machines
+@set H8300
+@set I960
+@set ARM
+@set HPPA
+@set MMIX
+@set MSP430
+@set POWERPC
+@set POWERPC64
+@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.17/ld/configure b/binutils-2.17/ld/configure
new file mode 100755
index 00000000..0cd6f5c9
--- /dev/null
+++ b/binutils-2.17/ld/configure
@@ -0,0 +1,11274 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; 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
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# 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
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# 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'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="ldmain.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S RANLIB ac_ct_RANLIB LIBTOOL use_sysroot TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE WARN_CFLAGS NO_WERROR CPP EGREP ALLOCA USE_NLS MSGFMT GMSGFMT XGETTEXT USE_INCLUDED_LIBINTL CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLDEPS INTLLIBS INTLOBJS POFILES POSUB INCLUDE_LOCALE_H GT_NO GT_YES MKINSTALLDIRS l YACC LEX LEXLIB LEX_OUTPUT_ROOT MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT HDEFINES HOSTING_CRT0 HOSTING_LIBS NATIVE_LIB_DIRS STRINGIFY EMUL EMULATION_OFILES EMUL_EXTRA_OFILES LIB_PATH EMULATION_LIBPATH TESTBFDLIB datarootdir docdir htmldir LIBOBJS LTLIBOBJS'
+ac_subst_files='TDIRS'
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# 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.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+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
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -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 | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -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 ;;
+
+ -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 ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ 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 ;;
+
+ -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --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 ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ 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'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+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
+ 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
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ 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
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# 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 \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+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]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_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-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-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)
+ --enable-targets alternative target configurations
+ --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)
+ --enable-werror treat compile warnings as errors
+ --enable-build-warnings Enable build-time compiler warnings
+ --disable-nls do not use Native Language Support
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+ --with-pic try to use only PIC/non-PIC objects default=use both
+ --with-lib-path=dir1:dir2... set default LIB_PATH
+ --with-sysroot=DIR Search for usr/lib et al within DIR.
+ --with-included-gettext use the GNU gettext library included here
+
+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>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+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`
+hostinfo = `(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=.
+ echo "PATH: $as_dir"
+done
+
+} >&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_sep=
+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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$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
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+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,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# 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
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ 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
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+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 `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+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
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+ ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+ ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6
+if test "${ac_cv_target+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_target_alias=$target_alias
+test "x$ac_cv_target_alias" = "x" &&
+ ac_cv_target_alias=$ac_cv_host_alias
+ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6
+target=$ac_cv_target
+target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+# 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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.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.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; 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 | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 -std1 is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std1. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for library containing strerror" >&5
+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6
+if test "${ac_cv_search_strerror+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_strerror=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char strerror ();
+int
+main ()
+{
+strerror ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_strerror="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_strerror" = no; then
+ for ac_lib in cposix; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char strerror ();
+int
+main ()
+{
+strerror ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_strerror="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+echo "${ECHO_T}$ac_cv_search_strerror" >&6
+if test "$ac_cv_search_strerror" != no; then
+ test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
+
+fi
+
+
+BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ ]*\([^ ]*\)[ ]*).*/\1/p' < ${srcdir}/../bfd/configure.in`
+am__api_version="1.9"
+# 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.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+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 $as_executable_p "$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
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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".
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ # We used to keeping the `.' as first argument, in order to
+ # allow $(mkdir_p) to be used without argument. As in
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined. However this is wrong
+ # for two reasons:
+ # 1. if the package is installed by a user who cannot write `.'
+ # make install will fail,
+ # 2. the above comment should most certainly read
+ # $(mkdir_p) $(DESTDIR)$(somedir)
+ # so it does not work when $(somedir) is undefined and
+ # $(DESTDIR) is not.
+ # To support the latter case, we have to write
+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+ # so the `.' trick is pointless.
+ mkdir_p='mkdir -p --'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--version;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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 done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+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
+
+
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+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"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# 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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ STRIP=$ac_ct_STRIP
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# 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=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ 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
+ 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
+
+ case $depmode in
+ 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
+ ;;
+ none) break ;;
+ esac
+ # 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.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} 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
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+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
+
+
+
+
+# Check whether --enable-shared or --disable-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.
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac
+else
+ enable_shared=yes
+fi;
+# Check whether --enable-static or --disable-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.
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac
+else
+ enable_static=yes
+fi;
+# Check whether --enable-fast-install or --disable-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.
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac
+else
+ enable_fast_install=yes
+fi;
+
+# Check whether --with-gnu-ld or --without-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.
+ echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ 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.
+ [\\/]* | [A-Za-z]:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the path 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
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ 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 GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+ test "$with_gnu_ld" != no && break
+ else
+ test "$with_gnu_ld" != yes && break
+ fi
+ fi
+ done
+ IFS="$ac_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
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+ lt_cv_prog_gnu_ld=yes
+else
+ lt_cv_prog_gnu_ld=no
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm=$ac_dir/${ac_tool_prefix}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
+ if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ else
+ 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
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+
+NM="$lt_cv_path_NM"
+echo "$as_me:$LINENO: result: $NM" >&5
+echo "${ECHO_T}$NM" >&6
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5
+echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ 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 egrep 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*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi4*)
+ 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* | mingw* |pw32*)
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ # this will be overwritten by pass_all, but leave it in just in case
+ lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.012)
+ lt_cv_file_magic_test_file='/System/Library/Frameworks/System.framework/System'
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+ ;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | kfreebsd*-gnu)
+ 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)/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
+ ;;
+
+hpux10.20*|hpux11*)
+ case $host_cpu in
+ hppa*)
+ 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_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ 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_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ esac
+ ;;
+
+irix5* | irix6*)
+ case $host_os in
+ irix5*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+ ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd* | knetbsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+ fi
+ ;;
+
+newsos6)
+ 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
+ ;;
+
+osf3* | osf4* | osf5*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sco3.2v5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+
+sysv5uw[78]* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ case $host_vendor in
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ 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*`
+ ;;
+ esac
+ ;;
+esac
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+
+
+
+
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+
+# find the maximum length of command line arguments
+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+ ;;
+
+ cygwin* | mingw*)
+ # 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;
+ ;;
+
+ 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 *BSD
+ 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`
+ ;;
+ esac
+
+fi
+
+if test -n "$lt_cv_sys_max_cmd_len" ; then
+ echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+else
+ echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+fi
+
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $MAGIC_CMD in
+ /*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+ ?:/*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+ ;;
+ *)
+ ac_save_MAGIC_CMD="$MAGIC_CMD"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="/usr/bin:$PATH"
+ for ac_dir in $ac_dummy; do
+ 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 <<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
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ MAGIC_CMD="$ac_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $MAGIC_CMD in
+ /*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+ ?:/*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+ ;;
+ *)
+ ac_save_MAGIC_CMD="$MAGIC_CMD"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="/usr/bin:$PATH"
+ for ac_dir in $ac_dummy; do
+ 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 <<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
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ MAGIC_CMD="$ac_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ STRIP=$ac_ct_STRIP
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+# Check for any special flags to pass to ltconfig.
+libtool_flags="--cache-file=$cache_file"
+test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
+test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
+test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
+test "$GCC" = yes && libtool_flags="$libtool_flags --with-gcc"
+test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
+
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+ enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
+test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi;
+test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic"
+test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 3872 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; 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*
+ ;;
+
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case "`/usr/bin/file conftest.o`" in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case "`/usr/bin/file conftest.o`" in
+ *32-bit*)
+ case $host in
+ 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-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ 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"
+ echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ lt_cv_cc_needs_belf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
+fi
+rm -f 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
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+
+
+esac
+
+
+# Save cache, so that ltconfig can load it
+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, don't put newlines in cache variables' values.
+# 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.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+# Actually configure libtool. ac_aux_dir is where install-sh is found.
+AR="$AR" LTCC="$CC" CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
+MAGIC_CMD="$MAGIC_CMD" LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
+LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" STRIP="$STRIP" \
+AS="$AS" DLLTOOL="$DLLTOOL" OBJDUMP="$OBJDUMP" \
+objext="$OBJEXT" exeext="$EXEEXT" reload_flag="$reload_flag" \
+deplibs_check_method="$deplibs_check_method" file_magic_cmd="$file_magic_cmd" \
+${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
+$libtool_flags --no-verify --build="$build" $ac_aux_dir/ltmain.sh $host \
+|| { { echo "$as_me:$LINENO: error: libtool configure failed" >&5
+echo "$as_me: error: libtool configure failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+# Reload cache, that may have been modified by ltconfig
+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
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh $ac_aux_dir/ltcf-c.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Redirect the config.log output again, so that the ltconfig log is not
+# clobbered by the next message.
+exec 5>>./config.log
+
+
+
+
+
+
+
+
+# Check whether --with-lib-path or --without-lib-path was given.
+if test "${with_lib_path+set}" = set; then
+ withval="$with_lib_path"
+ LIB_PATH=$withval
+fi;
+# Check whether --enable-targets or --disable-targets was given.
+if test "${enable_targets+set}" = set; then
+ enableval="$enable_targets"
+ case "${enableval}" in
+ yes | "") { { echo "$as_me:$LINENO: error: enable-targets option must specify target names or 'all'" >&5
+echo "$as_me: error: enable-targets option must specify target names or 'all'" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ no) enable_targets= ;;
+ *) enable_targets=$enableval ;;
+esac
+fi; # Check whether --enable-64-bit-bfd or --disable-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 ;;
+ *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for 64-bit-bfd option" >&5
+echo "$as_me: error: bad value ${enableval} for 64-bit-bfd option" >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ want64=false
+fi;
+
+# Check whether --with-sysroot or --without-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$exec_prefix" = xNONE; then
+ if test "x$prefix" = xNONE; then
+ test_prefix=/usr/local
+ else
+ test_prefix=$prefix
+ fi
+ else
+ test_prefix=$exec_prefix
+ fi
+ case ${TARGET_SYSTEM_ROOT} in
+ "${test_prefix}"|"${test_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;
+
+
+
+
+
+GCC_WARN_CFLAGS="-W -Wall -Wstrict-prototypes -Wmissing-prototypes"
+
+# Check whether --enable-werror or --disable-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" ;;
+ *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-werror" >&5
+echo "$as_me: error: bad value ${enableval} for --enable-werror" >&2;}
+ { (exit 1); exit 1; }; } ;;
+ esac
+fi;
+
+# 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 or --disable-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
+ { { echo "$as_me:$LINENO: error: Unrecognized target system type; please check config.sub." >&5
+echo "$as_me: error: Unrecognized target system type; please check config.sub." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "$host" ; then
+ { { echo "$as_me:$LINENO: error: Unrecognized host system type; please check config.sub." >&5
+echo "$as_me: error: Unrecognized host system type; please check config.sub." >&2;}
+ { (exit 1); exit 1; }; }
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 -std1 is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std1. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+# 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.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+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 $as_executable_p "$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
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+ALL_LINGUAS="fr sv tr es da vi zh_CN"
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.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))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ }
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_const=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_inline=$ac_kw; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6
+
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6
+if test "${ac_cv_type_off_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((off_t *) 0)
+ return 0;
+if (sizeof (off_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_off_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_off_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6
+if test $ac_cv_type_off_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((size_t *) 0)
+ return 0;
+if (sizeof (size_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_size_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_size_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+if test $ac_cv_type_size_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned
+_ACEOF
+
+fi
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments. Useless!
+echo "$as_me:$LINENO: checking for working alloca.h" >&5
+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6
+if test "${ac_cv_working_alloca_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_working_alloca_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_working_alloca_h=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
+echo "${ECHO_T}$ac_cv_working_alloca_h" >&6
+if test $ac_cv_working_alloca_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA_H 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for alloca" >&5
+echo $ECHO_N "checking for alloca... $ECHO_C" >&6
+if test "${ac_cv_func_alloca_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# if HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+# endif
+# endif
+# endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_alloca_works=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_alloca_works=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
+echo "${ECHO_T}$ac_cv_func_alloca_works" >&6
+
+if test $ac_cv_func_alloca_works = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA 1
+_ACEOF
+
+else
+ # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble. Some versions do not even contain alloca or
+# contain a buggy version. If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=alloca.$ac_objext
+
+cat >>confdefs.h <<\_ACEOF
+#define C_ALLOCA 1
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6
+if test "${ac_cv_os_cray+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#if defined(CRAY) && ! defined(CRAY2)
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "webecray" >/dev/null 2>&1; then
+ ac_cv_os_cray=yes
+else
+ ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
+echo "${ECHO_T}$ac_cv_os_cray" >&6
+if test $ac_cv_os_cray = yes; then
+ for ac_func in _getb67 GETB67 getb67; do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+ break
+fi
+
+ done
+fi
+
+echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6
+if test "${ac_cv_c_stack_direction+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_c_stack_direction=0
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+int
+find_stack_direction ()
+{
+ static char *addr = 0;
+ auto char dummy;
+ if (addr == 0)
+ {
+ addr = &dummy;
+ return find_stack_direction ();
+ }
+ else
+ return (&dummy > addr) ? 1 : -1;
+}
+
+int
+main ()
+{
+ exit (find_stack_direction () < 0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_stack_direction=1
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6
+
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+
+
+for ac_header in stdlib.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in getpagesize
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+echo "$as_me:$LINENO: checking for working mmap" >&5
+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
+if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_mmap_fixed_mapped=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+ Here is a matrix of mmap possibilities:
+ mmap private not fixed
+ mmap private fixed at somewhere currently unmapped
+ mmap private fixed at somewhere already mapped
+ mmap shared not fixed
+ mmap shared fixed at somewhere currently unmapped
+ mmap shared fixed at somewhere already mapped
+ For private mappings, we should verify that changes cannot be read()
+ back from the file, nor mmap's back from the file at a different
+ address. (There have been systems where private was not correctly
+ implemented like the infamous i386 svr4.0, and systems where the
+ VM page cache was not coherent with the file system buffer cache
+ like early versions of FreeBSD and possibly contemporary NetBSD.)
+ For shared mappings, we should conversely verify that changes get
+ propagated back to all the places they're supposed to be.
+
+ Grep wants private fixed already mapped.
+ The main things grep needs to know about mmap are:
+ * does it exist and is it safe to write into the mmap'd area
+ * how to use it (BSD variants) */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !STDC_HEADERS && !HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h. */
+#if !HAVE_GETPAGESIZE
+/* Assume that all systems that can run configure have sys/param.h. */
+# if !HAVE_SYS_PARAM_H
+# define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+# define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+# if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define getpagesize() EXEC_PAGESIZE
+# else /* no EXEC_PAGESIZE */
+# ifdef NBPG
+# define getpagesize() NBPG * CLSIZE
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif /* no CLSIZE */
+# else /* no NBPG */
+# ifdef NBPC
+# define getpagesize() NBPC
+# else /* no NBPC */
+# ifdef PAGESIZE
+# define getpagesize() PAGESIZE
+# endif /* PAGESIZE */
+# endif /* no NBPC */
+# endif /* no NBPG */
+# endif /* no EXEC_PAGESIZE */
+# else /* no HAVE_SYS_PARAM_H */
+# define getpagesize() 8192 /* punt totally */
+# endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+ char *data, *data2, *data3;
+ int i, pagesize;
+ int fd;
+
+ pagesize = getpagesize ();
+
+ /* First, make a file with some known garbage in it. */
+ data = (char *) malloc (pagesize);
+ if (!data)
+ exit (1);
+ for (i = 0; i < pagesize; ++i)
+ *(data + i) = rand ();
+ umask (0);
+ fd = creat ("conftest.mmap", 0600);
+ if (fd < 0)
+ exit (1);
+ if (write (fd, data, pagesize) != pagesize)
+ exit (1);
+ close (fd);
+
+ /* Next, try to mmap the file at a fixed address which already has
+ something else allocated at it. If we can, also make sure that
+ we see the same garbage. */
+ fd = open ("conftest.mmap", O_RDWR);
+ if (fd < 0)
+ exit (1);
+ data2 = (char *) malloc (2 * pagesize);
+ if (!data2)
+ exit (1);
+ data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1);
+ if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_FIXED, fd, 0L))
+ exit (1);
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data2 + i))
+ exit (1);
+
+ /* Finally, make sure that changes to the mapped area do not
+ percolate back to the file as seen by read(). (This is a bug on
+ some variants of i386 svr4.0.) */
+ for (i = 0; i < pagesize; ++i)
+ *(data2 + i) = *(data2 + i) + 1;
+ data3 = (char *) malloc (pagesize);
+ if (!data3)
+ exit (1);
+ if (read (fd, data3, pagesize) != pagesize)
+ exit (1);
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data3 + i))
+ exit (1);
+ close (fd);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_mmap_fixed_mapped=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
+echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
+
+fi
+rm -f conftest.mmap
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in argz.h limits.h locale.h nl_types.h malloc.h string.h \
+unistd.h values.h sys/param.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \
+__argz_count __argz_stringify __argz_next
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ if test "${ac_cv_func_stpcpy+set}" != "set"; then
+
+for ac_func in stpcpy
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ fi
+ if test "${ac_cv_func_stpcpy}" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STPCPY 1
+_ACEOF
+
+ fi
+
+ if test $ac_cv_header_locale_h = yes; then
+ echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
+echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6
+if test "${am_cv_val_LC_MESSAGES+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <locale.h>
+int
+main ()
+{
+return LC_MESSAGES
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ am_cv_val_LC_MESSAGES=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+am_cv_val_LC_MESSAGES=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5
+echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6
+ if test $am_cv_val_LC_MESSAGES = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LC_MESSAGES 1
+_ACEOF
+
+ fi
+ fi
+ echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+ # Check whether --enable-nls or --disable-nls was given.
+if test "${enable_nls+set}" = set; then
+ enableval="$enable_nls"
+ USE_NLS=$enableval
+else
+ USE_NLS=yes
+fi;
+ echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6
+
+
+ USE_INCLUDED_LIBINTL=no
+
+ if test "$USE_NLS" = "yes"; then
+ echo "$as_me:$LINENO: checking whether included gettext is requested" >&5
+echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6
+
+# Check whether --with-included-gettext or --without-included-gettext was given.
+if test "${with_included_gettext+set}" = set; then
+ withval="$with_included_gettext"
+ nls_cv_force_use_gnu_gettext=$withval
+else
+ nls_cv_force_use_gnu_gettext=no
+fi;
+ echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5
+echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+ CATOBJEXT=
+
+ if test "${ac_cv_header_libintl_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for libintl.h" >&5
+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
+if test "${ac_cv_header_libintl_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking libintl.h usability" >&5
+echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <libintl.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking libintl.h presence" >&5
+echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <libintl.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: libintl.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: libintl.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: libintl.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: libintl.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: libintl.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for libintl.h" >&5
+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
+if test "${ac_cv_header_libintl_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_libintl_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
+
+fi
+if test $ac_cv_header_libintl_h = yes; then
+ echo "$as_me:$LINENO: checking for gettext in libc" >&5
+echo $ECHO_N "checking for gettext in libc... $ECHO_C" >&6
+if test "${gt_cv_func_gettext_libc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <libintl.h>
+int
+main ()
+{
+return (int) gettext ("")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_func_gettext_libc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_func_gettext_libc=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libc" >&5
+echo "${ECHO_T}$gt_cv_func_gettext_libc" >&6
+
+ if test "$gt_cv_func_gettext_libc" != "yes"; then
+ echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5
+echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6
+if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char bindtextdomain ();
+int
+main ()
+{
+bindtextdomain ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_intl_bindtextdomain=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_intl_bindtextdomain=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6
+if test $ac_cv_lib_intl_bindtextdomain = yes; then
+ echo "$as_me:$LINENO: checking for gettext in libintl" >&5
+echo $ECHO_N "checking for gettext in libintl... $ECHO_C" >&6
+if test "${gt_cv_func_gettext_libintl+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+return (int) gettext ("")
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ gt_cv_func_gettext_libintl=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_func_gettext_libintl=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $gt_cv_func_gettext_libintl" >&5
+echo "${ECHO_T}$gt_cv_func_gettext_libintl" >&6
+fi
+
+ fi
+
+ if test "$gt_cv_func_gettext_libc" = "yes" \
+ || test "$gt_cv_func_gettext_libintl" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+ # Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGFMT" in
+ /*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word"
+ break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test -n "$MSGFMT"; then
+ echo "$as_me:$LINENO: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ if test "$MSGFMT" != "no"; then
+
+for ac_func in dcgettext
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+
+if test -n "$GMSGFMT"; then
+ echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+echo "${ECHO_T}$GMSGFMT" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ # Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$XGETTEXT" in
+ /*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
+ break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test -n "$XGETTEXT"; then
+ echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+extern int _nl_msg_cat_cntr;
+ return _nl_msg_cat_cntr
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ CATOBJEXT=.gmo
+ DATADIRNAME=share
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+CATOBJEXT=.mo
+ DATADIRNAME=lib
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ INSTOBJEXT=.mo
+ fi
+ fi
+
+fi
+
+
+
+
+ if test x"$CATOBJEXT" = x && test -d $srcdir/../intl; then
+ # Neither gettext nor catgets in included in the C library.
+ # Fall back on GNU gettext library (assuming it is present).
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ INTLOBJS="\$(GETTOBJS)"
+ # Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$MSGFMT" in
+ /*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word"
+ break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="msgfmt"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test -n "$MSGFMT"; then
+ echo "$as_me:$LINENO: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+
+if test -n "$GMSGFMT"; then
+ echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+echo "${ECHO_T}$GMSGFMT" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ # Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case "$XGETTEXT" in
+ /*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
+ break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test -n "$XGETTEXT"; then
+ echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+ USE_INCLUDED_LIBINTL=yes
+ CATOBJEXT=.gmo
+ INSTOBJEXT=.mo
+ DATADIRNAME=share
+ INTLDEPS='$(top_builddir)/../intl/libintl.a'
+ INTLLIBS=$INTLDEPS
+ LIBS=`echo $LIBS | sed -e 's/-lintl//'`
+ nls_cv_header_intl=libintl.h
+ nls_cv_header_libgt=libgettext.h
+ fi
+
+ if test "$XGETTEXT" != ":"; then
+ if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+ : ;
+ else
+ echo "$as_me:$LINENO: result: found xgettext programs is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext programs is not GNU xgettext; ignore it" >&6
+ XGETTEXT=":"
+ fi
+ fi
+
+ # We need to process the po/ directory.
+ POSUB=po
+ else
+ DATADIRNAME=share
+ nls_cv_header_intl=libintl.h
+ nls_cv_header_libgt=libgettext.h
+ fi
+
+ # If this is used in GNU gettext we have to set USE_NLS to `yes'
+ # because some of the sources are only built for this goal.
+ if test "$PACKAGE" = gettext; then
+ USE_NLS=yes
+ USE_INCLUDED_LIBINTL=yes
+ fi
+
+ for lang in $ALL_LINGUAS; do
+ GMOFILES="$GMOFILES $lang.gmo"
+ POFILES="$POFILES $lang.po"
+ done
+
+
+
+
+
+
+
+
+
+
+
+
+ if test "x$CATOBJEXT" != "x"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+ fi
+
+
+ if test "x$CATOBJEXT" != "x"; then
+ if test "x$ALL_LINGUAS" = "x"; then
+ LINGUAS=
+ else
+ echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
+ NEW_LINGUAS=
+ for lang in ${LINGUAS=$ALL_LINGUAS}; do
+ case "$ALL_LINGUAS" in
+ *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
+ esac
+ done
+ LINGUAS=$NEW_LINGUAS
+ echo "$as_me:$LINENO: result: $LINGUAS" >&5
+echo "${ECHO_T}$LINGUAS" >&6
+ fi
+
+ if test -n "$LINGUAS"; then
+ for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+ fi
+ fi
+
+ if test $ac_cv_header_locale_h = yes; then
+ INCLUDE_LOCALE_H="#include <locale.h>"
+ else
+ INCLUDE_LOCALE_H="\
+/* The system does not provide the header <locale.h>. Take care yourself. */"
+ fi
+
+
+ if test -f $srcdir/po2tbl.sed.in; then
+ if test "$CATOBJEXT" = ".cat"; then
+ if test "${ac_cv_header_linux_version_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for linux/version.h" >&5
+echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6
+if test "${ac_cv_header_linux_version_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5
+echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking linux/version.h usability" >&5
+echo $ECHO_N "checking linux/version.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <linux/version.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking linux/version.h presence" >&5
+echo $ECHO_N "checking linux/version.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <linux/version.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: linux/version.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: linux/version.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/version.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: linux/version.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: linux/version.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: linux/version.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/version.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: linux/version.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/version.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: linux/version.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/version.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: linux/version.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/version.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: linux/version.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/version.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: linux/version.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for linux/version.h" >&5
+echo $ECHO_N "checking for linux/version.h... $ECHO_C" >&6
+if test "${ac_cv_header_linux_version_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_linux_version_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_linux_version_h" >&5
+echo "${ECHO_T}$ac_cv_header_linux_version_h" >&6
+
+fi
+if test $ac_cv_header_linux_version_h = yes; then
+ msgformat=linux
+else
+ msgformat=xopen
+fi
+
+
+
+ sed -e '/^#/d' $srcdir/$msgformat-msg.sed > po2msg.sed
+ fi
+ sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
+ $srcdir/po2tbl.sed.in > po2tbl.sed
+ fi
+
+ if test "$PACKAGE" = "gettext"; then
+ GT_NO="#NO#"
+ GT_YES=
+ else
+ GT_NO=
+ GT_YES="#YES#"
+ fi
+
+
+
+ MKINSTALLDIRS="\$(srcdir)/../../mkinstalldirs"
+
+
+ l=
+
+
+ if test -f $srcdir/po/POTFILES.in; then
+ test -d po || mkdir po
+ if test "x$srcdir" != "x."; then
+ if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
+ posrcprefix="$srcdir/"
+ else
+ posrcprefix="../$srcdir/"
+ fi
+ else
+ posrcprefix="../"
+ fi
+ rm -f po/POTFILES
+ sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
+ < $srcdir/po/POTFILES.in > po/POTFILES
+ fi
+
+
+
+
+for ac_prog in 'bison -y' byacc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_YACC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_YACC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+ echo "$as_me:$LINENO: result: $YACC" >&5
+echo "${ECHO_T}$YACC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_LEX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LEX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+LEX=$ac_cv_prog_LEX
+if test -n "$LEX"; then
+ echo "$as_me:$LINENO: result: $LEX" >&5
+echo "${ECHO_T}$LEX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$LEX" && break
+done
+test -n "$LEX" || LEX=":"
+
+if test -z "$LEXLIB"
+then
+ echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5
+echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6
+if test "${ac_cv_lib_fl_yywrap+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char yywrap ();
+int
+main ()
+{
+yywrap ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_fl_yywrap=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_fl_yywrap=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5
+echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6
+if test $ac_cv_lib_fl_yywrap = yes; then
+ LEXLIB="-lfl"
+else
+ echo "$as_me:$LINENO: checking for yywrap in -ll" >&5
+echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6
+if test "${ac_cv_lib_l_yywrap+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ll $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char yywrap ();
+int
+main ()
+{
+yywrap ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_l_yywrap=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_l_yywrap=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5
+echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6
+if test $ac_cv_lib_l_yywrap = yes; then
+ LEXLIB="-ll"
+fi
+
+fi
+
+fi
+
+if test "x$LEX" != "x:"; then
+ echo "$as_me:$LINENO: checking lex output file root" >&5
+echo $ECHO_N "checking lex output file root... $ECHO_C" >&6
+if test "${ac_cv_prog_lex_root+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # The minimal lex program is just a single line: %%. But some broken lexes
+# (Solaris, I think it was) want two %% lines, so accommodate them.
+cat >conftest.l <<_ACEOF
+%%
+%%
+_ACEOF
+{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5
+ (eval $LEX conftest.l) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+if test -f lex.yy.c; then
+ ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+ ac_cv_prog_lex_root=lexyy
+else
+ { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5
+echo "$as_me: error: cannot find output from $LEX; giving up" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5
+echo "${ECHO_T}$ac_cv_prog_lex_root" >&6
+rm -f conftest.l
+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
+
+echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5
+echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6
+if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent. Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
+ac_save_LIBS=$LIBS
+LIBS="$LIBS $LEXLIB"
+cat >conftest.$ac_ext <<_ACEOF
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_lex_yytext_pointer=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_save_LIBS
+rm -f "${LEX_OUTPUT_ROOT}.c"
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5
+echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define YYTEXT_POINTER 1
+_ACEOF
+
+fi
+
+fi
+if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+fi
+
+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+ USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi;
+ echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+
+
+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
+
+
+
+. ${srcdir}/configure.host
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in string.h strings.h stdlib.h unistd.h elf-hints.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+for ac_func in sbrk realpath glob
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `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=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_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
+ echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in dir; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+ test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
+
+fi
+
+else
+ echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in x; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+ test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
+
+fi
+
+fi
+
+
+echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5
+echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6
+if test "${ld_cv_decl_getopt_unistd_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <unistd.h>
+int
+main ()
+{
+extern int getopt (int, char *const*, const char *);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ld_cv_decl_getopt_unistd_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ld_cv_decl_getopt_unistd_h=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+echo "$as_me:$LINENO: result: $ld_cv_decl_getopt_unistd_h" >&5
+echo "${ECHO_T}$ld_cv_decl_getopt_unistd_h" >&6
+if test $ld_cv_decl_getopt_unistd_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DECL_GETOPT 1
+_ACEOF
+
+fi
+
+
+case "${host}" in
+*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_BINARY_FOPEN 1
+_ACEOF
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking whether strstr is declared" >&5
+echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_strstr+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strstr
+ char *p = (char *) strstr;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_strstr=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_strstr=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5
+echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6
+if test $ac_cv_have_decl_strstr = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRSTR 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRSTR 0
+_ACEOF
+
+
+fi
+echo "$as_me:$LINENO: checking whether free is declared" >&5
+echo $ECHO_N "checking whether free is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_free+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef free
+ char *p = (char *) free;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_free=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_free=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_free" >&5
+echo "${ECHO_T}$ac_cv_have_decl_free" >&6
+if test $ac_cv_have_decl_free = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREE 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FREE 0
+_ACEOF
+
+
+fi
+echo "$as_me:$LINENO: checking whether sbrk is declared" >&5
+echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_sbrk+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef sbrk
+ char *p = (char *) sbrk;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_sbrk=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_sbrk=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5
+echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6
+if test $ac_cv_have_decl_sbrk = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SBRK 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SBRK 0
+_ACEOF
+
+
+fi
+echo "$as_me:$LINENO: checking whether getenv is declared" >&5
+echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_getenv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef getenv
+ char *p = (char *) getenv;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_getenv=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_getenv=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6
+if test $ac_cv_have_decl_getenv = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV 0
+_ACEOF
+
+
+fi
+echo "$as_me:$LINENO: checking whether environ is declared" >&5
+echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_environ+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+#ifndef environ
+ char *p = (char *) environ;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_environ=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_environ=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5
+echo "${ECHO_T}$ac_cv_have_decl_environ" >&6
+if test $ac_cv_have_decl_environ = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ENVIRON 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ENVIRON 0
+_ACEOF
+
+
+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.
+echo "$as_me:$LINENO: checking whether ANSI C string concatenation works" >&5
+echo $ECHO_N "checking whether ANSI C string concatenation works... $ECHO_C" >&6
+if test "${ld_cv_string_concatenation+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+char *a = "a" "a";
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ld_cv_string_concatenation=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ld_cv_string_concatenation=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+echo "$as_me:$LINENO: result: $ld_cv_string_concatenation" >&5
+echo "${ECHO_T}$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
+
+ 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} = 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"
+ ac_config_commands="$ac_config_commands default"
+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, don't put newlines in cache variables' values.
+# 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.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ 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}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $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}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; 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
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# 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
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# 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'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --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 <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+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
+ ;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ 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
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;;
+ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If 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 to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@target@,$target,;t t
+s,@target_cpu@,$target_cpu,;t t
+s,@target_vendor@,$target_vendor,;t t
+s,@target_os@,$target_os,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CYGPATH_W@,$CYGPATH_W,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@install_sh@,$install_sh,;t t
+s,@STRIP@,$STRIP,;t t
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s,@mkdir_p@,$mkdir_p,;t t
+s,@AWK@,$AWK,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@am__leading_dot@,$am__leading_dot,;t t
+s,@AMTAR@,$AMTAR,;t t
+s,@am__tar@,$am__tar,;t t
+s,@am__untar@,$am__untar,;t t
+s,@DEPDIR@,$DEPDIR,;t t
+s,@am__include@,$am__include,;t t
+s,@am__quote@,$am__quote,;t t
+s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s,@CCDEPMODE@,$CCDEPMODE,;t t
+s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s,@LN_S@,$LN_S,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@LIBTOOL@,$LIBTOOL,;t t
+s,@use_sysroot@,$use_sysroot,;t t
+s,@TARGET_SYSTEM_ROOT@,$TARGET_SYSTEM_ROOT,;t t
+s,@TARGET_SYSTEM_ROOT_DEFINE@,$TARGET_SYSTEM_ROOT_DEFINE,;t t
+s,@WARN_CFLAGS@,$WARN_CFLAGS,;t t
+s,@NO_WERROR@,$NO_WERROR,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@ALLOCA@,$ALLOCA,;t t
+s,@USE_NLS@,$USE_NLS,;t t
+s,@MSGFMT@,$MSGFMT,;t t
+s,@GMSGFMT@,$GMSGFMT,;t t
+s,@XGETTEXT@,$XGETTEXT,;t t
+s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s,@CATALOGS@,$CATALOGS,;t t
+s,@CATOBJEXT@,$CATOBJEXT,;t t
+s,@DATADIRNAME@,$DATADIRNAME,;t t
+s,@GMOFILES@,$GMOFILES,;t t
+s,@INSTOBJEXT@,$INSTOBJEXT,;t t
+s,@INTLDEPS@,$INTLDEPS,;t t
+s,@INTLLIBS@,$INTLLIBS,;t t
+s,@INTLOBJS@,$INTLOBJS,;t t
+s,@POFILES@,$POFILES,;t t
+s,@POSUB@,$POSUB,;t t
+s,@INCLUDE_LOCALE_H@,$INCLUDE_LOCALE_H,;t t
+s,@GT_NO@,$GT_NO,;t t
+s,@GT_YES@,$GT_YES,;t t
+s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
+s,@l@,$l,;t t
+s,@YACC@,$YACC,;t t
+s,@LEX@,$LEX,;t t
+s,@LEXLIB@,$LEXLIB,;t t
+s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t
+s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s,@MAINT@,$MAINT,;t t
+s,@HDEFINES@,$HDEFINES,;t t
+s,@HOSTING_CRT0@,$HOSTING_CRT0,;t t
+s,@HOSTING_LIBS@,$HOSTING_LIBS,;t t
+s,@NATIVE_LIB_DIRS@,$NATIVE_LIB_DIRS,;t t
+s,@STRINGIFY@,$STRINGIFY,;t t
+s,@EMUL@,$EMUL,;t t
+s,@EMULATION_OFILES@,$EMULATION_OFILES,;t t
+s,@EMUL_EXTRA_OFILES@,$EMUL_EXTRA_OFILES,;t t
+s,@LIB_PATH@,$LIB_PATH,;t t
+s,@EMULATION_LIBPATH@,$EMULATION_LIBPATH,;t t
+s,@TESTBFDLIB@,$TESTBFDLIB,;t t
+s,@datarootdir@,$datarootdir,;t t
+s,@docdir@,$docdir,;t t
+s,@htmldir@,$htmldir,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+/@TDIRS@/r $TDIRS
+s,@TDIRS@,,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ # Do quote $f, to prevent DOS paths from being IFS'd.
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $ac_file | $ac_file:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X$ac_file : 'X\(//\)[^/]' \| \
+ X$ac_file : 'X\(//\)$' \| \
+ X$ac_file : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_dest" : 'X\(//\)[^/]' \| \
+ X"$ac_dest" : 'X\(//\)$' \| \
+ X"$ac_dest" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+ case $ac_dest in
+ depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+ # 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.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ 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=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p $dirpart/$fdir
+ else
+ as_dir=$dirpart/$fdir
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+ ;;
+ default ) sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile ;;
+ esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# 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 || { (exit 1); exit 1; }
+fi
+
diff --git a/binutils-2.17/ld/configure.host b/binutils-2.17/ld/configure.host
new file mode 100644
index 00000000..f9f080f6
--- /dev/null
+++ b/binutils-2.17/ld/configure.host
@@ -0,0 +1,246 @@
+# 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)
+ 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
+ ;;
+
+am33_2.0-*-linux*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]\*,ld-linux,g"`
+ ;;
+
+arm*-*-linux-*)
+ HOSTING_CRT0='-p '`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]\*,ld-linux,g"`
+ ;;
+
+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`'
+ ;;
+
+ia64-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]*\*,ld-linux-ia64,g"`
+ ;;
+
+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'
+ ;;
+
+mips*-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+m68*-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+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=`echo "$HOSTING_LIBS" | sed -e "s,-lc,-lc881,"`
+ ;;
+
+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`'
+ ;;
+
+powerpc64*-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld64.so.1,"`
+ ;;
+
+powerpc*-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+s390x-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld64.so.1,"`
+ ;;
+
+s390-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
+ ;;
+
+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`'
+ ;;
+
+sparc-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld-linux.so.2,"`
+ ;;
+
+sparc64-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld-linux.so.2,"`
+ ;;
+
+x86_64-*-linux-*)
+ HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld-linux-x86-64.so.2,"`
+ ;;
+
+*-*-freebsd* | *-*-kfreebsd*-gnu)
+ ;;
+
+*-*-linux*)
+ ;;
+
+*-*-netbsd*)
+ ;;
+
+*-*-openbsd*)
+ ;;
+
+alpha*-*-*)
+ HOSTING_CRT0=/usr/ccs/lib/crt0.o
+ ;;
+
+esac
diff --git a/binutils-2.17/ld/configure.in b/binutils-2.17/ld/configure.in
new file mode 100644
index 00000000..e020288c
--- /dev/null
+++ b/binutils-2.17/ld/configure.in
@@ -0,0 +1,262 @@
+dnl Process this file with autoconf to produce a configure script
+dnl
+AC_PREREQ(2.57)
+AC_INIT(ldmain.c)
+
+AC_CANONICAL_SYSTEM
+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_PROG_LIBTOOL
+
+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_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$exec_prefix" = xNONE; then
+ if test "x$prefix" = xNONE; then
+ test_prefix=/usr/local
+ else
+ test_prefix=$prefix
+ fi
+ else
+ test_prefix=$exec_prefix
+ fi
+ case ${TARGET_SYSTEM_ROOT} in
+ "${test_prefix}"|"${test_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)
+
+AM_BINUTILS_WARNINGS
+
+AM_CONFIG_HEADER(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_PROG_INSTALL
+
+ALL_LINGUAS="fr sv tr es da vi zh_CN"
+CY_GNU_GETTEXT
+
+AC_EXEEXT
+
+AC_PROG_YACC
+AM_PROG_LEX
+
+AM_MAINTAINER_MODE
+
+. ${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)
+AC_CHECK_FUNCS(sbrk realpath glob)
+AC_HEADER_DIRENT
+
+AC_MSG_CHECKING(for a known getopt prototype in unistd.h)
+AC_CACHE_VAL(ld_cv_decl_getopt_unistd_h,
+[AC_TRY_COMPILE([#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])
+
+# 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_TRY_COMPILE(,[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
+
+ 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)
+
+dnl FIXME: We will build a 64 bit BFD for a 64 bit host or a 64 bit
+dnl target, and in those cases we should also build the 64 bit
+dnl emulations.
+if test x${all_targets} = xtrue; then
+ 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 and install-html
+AC_SUBST(datarootdir)
+AC_SUBST(docdir)
+AC_SUBST(htmldir)
+
+AC_OUTPUT(Makefile po/Makefile.in:po/Make-in,
+[sed -e '/POTFILES =/r po/POTFILES' po/Makefile.in > po/Makefile])
diff --git a/binutils-2.17/ld/configure.tgt b/binutils-2.17/ld/configure.tgt
new file mode 100644
index 00000000..d324e4ec
--- /dev/null
+++ b/binutils-2.17/ld/configure.tgt
@@ -0,0 +1,629 @@
+# 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
+# NATIVE_LIB_DIRS library directories to search on this host
+# (if we are a native or sysrooted linker)
+
+targ_extra_emuls=
+targ_extra_ofiles=
+
+# 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
+ ;;
+arc-*-elf*) targ_emul=arcelf
+ ;;
+arm-epoc-pe) targ_emul=arm_epoc_pe ; targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+arm-*-wince) targ_emul=armpe ; 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 ;;
+arm*b-*-linux-*) targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
+arm*-*-linux-*eabi) targ_emul=armelf_linux_eabi ;;
+arm*-*-linux-*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+arm*-*-uclinux*) targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
+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 avr3 avr4 avr5"
+ ;;
+bfin-*-elf) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;;
+bfin-*-uclinux*) targ_emul=elf32bfin; targ_extra_emuls="elf32bfinfd" ;;
+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
+ ;;
+fr30-*-*) targ_emul=elf32fr30
+ ;;
+frv-*-*linux*) targ_emul=elf32frvfd ;;
+frv-*-*) targ_emul=elf32frv ; targ_extra_emuls="elf32frvfd"
+ ;;
+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*-*) 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
+ if test x${want64} = xtrue; then
+ targ_extra_emuls="$targ_extra_emuls elf_x86_64"
+ fi
+ tdir_i386linux=${targ_alias}aout ;;
+x86_64-*-linux-*) targ_emul=elf_x86_64
+ targ_extra_emuls="elf_i386 i386linux"
+ 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_ldso
+ targ_extra_emuls="elf_i386 elf_x86_64"
+ ;;
+i[3-7]86-*-unixware) targ_emul=elf_i386 ;;
+i[3-7]86-*-solaris*) targ_emul=elf_i386_ldso
+ targ_extra_emuls="elf_i386"
+ ;;
+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"
+ 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
+ ;;
+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)
+ 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"
+ 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" ;;
+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"
+ ;;
+m32c-*-elf) targ_emul=elf32m32c
+ ;;
+m32r*le-*-elf*) targ_emul=m32rlelf ;;
+m32r*-*-elf*) 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
+ ;;
+maxq-*-coff) targ_emul=maxqcoff
+ ;;
+mcore-*-pe) targ_emul=mcorepe ;
+ targ_extra_ofiles="deffilep.o pe-dll.o" ;;
+mcore-*-elf) targ_emul=elf32mcore
+ ;;
+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-*-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="elf32ltsmip elf64ltsmip" ;;
+mips64*-*-linux-*) targ_emul=elf32btsmipn32
+ targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+ targ_extra_libpath="elf32btsmip elf64btsmip" ;;
+mips*el-*-linux-*) targ_emul=elf32ltsmip
+ targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip" ;;
+mips*-*-linux-*) targ_emul=elf32btsmip
+ targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip" ;;
+mips*-*-lnews*) targ_emul=mipslnews ;;
+mips*-*-sysv4*) targ_emul=elf32btsmip
+ ;;
+mmix-*-*) targ_emul=mmo
+ targ_extra_emuls=elf64mmix
+ ;;
+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
+ if test "${want64}" = "true"; then
+ targ_extra_emuls="$targ_extra_emuls elf64ppc"
+ targ_extra_libpath="$targ_extra_libpath elf64ppc"
+ fi ;;
+ 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-*-aix5*) targ_emul=aix5ppc ;;
+powerpc-*-aix*) targ_emul=aixppc ;;
+powerpc-*-beos*) targ_emul=aixppc ;;
+powerpc-*-windiss*) targ_emul=elf32ppcwindiss ;;
+powerpc-*-lynxos*) targ_emul=ppclynx ;;
+rs6000-*-aix5*) targ_emul=aix5rs6 ;;
+rs6000-*-aix*) targ_emul=aixrs6
+ ;;
+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
+ if test "${want64}" = "true"; then
+ targ_extra_emuls=elf64_s390
+ targ_extra_libpath=$targ_extra_emuls
+ tdir_elf64_s390=`echo ${targ_alias} | sed -e 's/s390/s390x/'`
+ fi
+ ;;
+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* | sh-*-vxworks)
+ targ_emul=shelf
+ targ_extra_emuls="shlelf sh shl" ;;
+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 ;;
+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 ;;
+sparc-*-solaris2*) targ_emul=elf32_sparc
+ targ_extra_emuls="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
+ targ_extra_emuls="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
+ ;;
+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 ;;
+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*)
+ 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'
+ ;;
+
+i[03-9x]86-*-cygwin*)
+ NATIVE_LIB_DIRS='/usr/lib /usr/lib/w32api'
+ ;;
+
+*-*-linux*)
+ ;;
+
+*-*-freebsd*)
+ ;;
+
+*-*-netbsd*)
+ ;;
+
+alpha*-*-*)
+ NATIVE_LIB_DIRS='/usr/local/lib /usr/ccs/lib /lib /usr/lib'
+ ;;
+
+esac
diff --git a/binutils-2.17/ld/deffile.h b/binutils-2.17/ld/deffile.h
new file mode 100644
index 00000000..6db8bf79
--- /dev/null
+++ b/binutils-2.17/ld/deffile.h
@@ -0,0 +1,103 @@
+/* deffile.h - header for .DEF file parser
+ Copyright 1998, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+ Written by DJ Delorie dj@cygnus.com
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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 */
+ 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 */
+ int ordinal; /* may be -1 */
+ int data; /* = 1 if data */
+} def_file_import;
+
+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;
+} 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);
+extern def_file_import *def_file_add_import (def_file *, const char *,
+ const char *, int, 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.17/ld/deffilep.y b/binutils-2.17/ld/deffilep.y
new file mode 100644
index 00000000..5c699f39
--- /dev/null
+++ b/binutils-2.17/ld/deffilep.y
@@ -0,0 +1,1077 @@
+%{ /* deffilep.y - parser for .def files */
+
+/* Copyright 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ 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 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include "libiberty.h"
+#include "safe-ctype.h"
+#include "bfd.h"
+#include "sysdep.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);
+static void def_heapsize (int, int);
+static void def_import (const char *, const char *, const char *, const char *,
+ int);
+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 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;
+};
+
+%token NAME LIBRARY DESCRIPTION STACKSIZE HEAPSIZE CODE DATAU DATAL
+%token SECTIONS EXPORTS IMPORTS VERSIONK BASE CONSTANTU CONSTANTL
+%token PRIVATEU PRIVATEL
+%token READ WRITE EXECUTE SHARED NONAMEU NONAMEL DIRECTIVE
+%token <id> ID
+%token <number> NUMBER
+%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
+
+%%
+
+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 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);}
+ ;
+
+
+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
+ { def_exports ($1, $2, $3, $5); }
+ ;
+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 { def_import ($1, $3, $5, $7, -1); }
+ | ID '=' ID '.' ID '.' NUMBER { def_import ($1, $3, $5, 0, $7); }
+ | ID '=' ID '.' ID { def_import ($1, $3, 0, $5, -1); }
+ | ID '=' ID '.' NUMBER { def_import ($1, $3, 0, 0, $5); }
+ | ID '.' ID '.' ID { def_import ( 0, $1, $3, $5, -1); }
+ | ID '.' ID { def_import ( 0, $1, 0, $3, -1); }
+;
+
+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 '.' ID
+ {
+ char *name = xmalloc (strlen ($1) + 1 + strlen ($3) + 1);
+ sprintf (name, "%s.%s", $1, $3);
+ $$ = name;
+ }
+ | { $$ = ""; }
+ ;
+
+opt_ordinal:
+ '@' NUMBER { $$ = $2;}
+ | { $$ = -1;}
+ ;
+
+opt_equal_name:
+ '=' dot_name { $$ = $2; }
+ | { $$ = 0; }
+ ;
+
+opt_base: BASE '=' NUMBER { $$ = $3;}
+ | { $$ = -1;}
+ ;
+
+dot_name: ID { $$ = $1; }
+ | dot_name '.' ID
+ {
+ char *name = xmalloc (strlen ($1) + 1 + strlen ($3) + 1);
+ sprintf (name, "%s.%s", $1, $3);
+ $$ = name;
+ }
+ ;
+
+
+%%
+
+/*****************************************************************************
+ 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 *def)
+{
+ int i;
+
+ if (!def)
+ return;
+ if (def->name)
+ free (def->name);
+ if (def->description)
+ free (def->description);
+
+ if (def->section_defs)
+ {
+ for (i = 0; i < def->num_section_defs; i++)
+ {
+ if (def->section_defs[i].name)
+ free (def->section_defs[i].name);
+ if (def->section_defs[i].class)
+ free (def->section_defs[i].class);
+ }
+ free (def->section_defs);
+ }
+
+ if (def->exports)
+ {
+ for (i = 0; i < def->num_exports; i++)
+ {
+ if (def->exports[i].internal_name
+ && def->exports[i].internal_name != def->exports[i].name)
+ free (def->exports[i].internal_name);
+ if (def->exports[i].name)
+ free (def->exports[i].name);
+ }
+ free (def->exports);
+ }
+
+ if (def->imports)
+ {
+ for (i = 0; i < def->num_imports; i++)
+ {
+ if (def->imports[i].internal_name
+ && def->imports[i].internal_name != def->imports[i].name)
+ free (def->imports[i].internal_name);
+ if (def->imports[i].name)
+ free (def->imports[i].name);
+ }
+ free (def->imports);
+ }
+
+ while (def->modules)
+ {
+ def_file_module *m = def->modules;
+ def->modules = def->modules->next;
+ free (m);
+ }
+
+ free (def);
+}
+
+#ifdef DEF_FILE_PRINT
+void
+def_file_print (FILE *file, def_file *def)
+{
+ int i;
+
+ fprintf (file, ">>>> def_file at 0x%08x\n", def);
+ if (def->name)
+ fprintf (file, " name: %s\n", def->name ? def->name : "(unspecified)");
+ if (def->is_dll != -1)
+ fprintf (file, " is dll: %s\n", def->is_dll ? "yes" : "no");
+ if (def->base_address != (bfd_vma) -1)
+ fprintf (file, " base address: 0x%08x\n", def->base_address);
+ if (def->description)
+ fprintf (file, " description: `%s'\n", def->description);
+ if (def->stack_reserve != -1)
+ fprintf (file, " stack reserve: 0x%08x\n", def->stack_reserve);
+ if (def->stack_commit != -1)
+ fprintf (file, " stack commit: 0x%08x\n", def->stack_commit);
+ if (def->heap_reserve != -1)
+ fprintf (file, " heap reserve: 0x%08x\n", def->heap_reserve);
+ if (def->heap_commit != -1)
+ fprintf (file, " heap commit: 0x%08x\n", def->heap_commit);
+
+ if (def->num_section_defs > 0)
+ {
+ fprintf (file, " section defs:\n");
+
+ for (i = 0; i < def->num_section_defs; i++)
+ {
+ fprintf (file, " name: `%s', class: `%s', flags:",
+ def->section_defs[i].name, def->section_defs[i].class);
+ if (def->section_defs[i].flag_read)
+ fprintf (file, " R");
+ if (def->section_defs[i].flag_write)
+ fprintf (file, " W");
+ if (def->section_defs[i].flag_execute)
+ fprintf (file, " X");
+ if (def->section_defs[i].flag_shared)
+ fprintf (file, " S");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (def->num_exports > 0)
+ {
+ fprintf (file, " exports:\n");
+
+ for (i = 0; i < def->num_exports; i++)
+ {
+ fprintf (file, " name: `%s', int: `%s', ordinal: %d, flags:",
+ def->exports[i].name, def->exports[i].internal_name,
+ def->exports[i].ordinal);
+ if (def->exports[i].flag_private)
+ fprintf (file, " P");
+ if (def->exports[i].flag_constant)
+ fprintf (file, " C");
+ if (def->exports[i].flag_noname)
+ fprintf (file, " N");
+ if (def->exports[i].flag_data)
+ fprintf (file, " D");
+ fprintf (file, "\n");
+ }
+ }
+
+ if (def->num_imports > 0)
+ {
+ fprintf (file, " imports:\n");
+
+ for (i = 0; i < def->num_imports; i++)
+ {
+ fprintf (file, " int: %s, from: `%s', name: `%s', ordinal: %d\n",
+ def->imports[i].internal_name,
+ def->imports[i].module,
+ def->imports[i].name,
+ def->imports[i].ordinal);
+ }
+ }
+
+ if (def->version_major != -1)
+ fprintf (file, " version: %d.%d\n", def->version_major, def->version_minor);
+
+ fprintf (file, "<<<< def_file at 0x%08x\n", def);
+}
+#endif
+
+def_file_export *
+def_file_add_export (def_file *def,
+ const char *external_name,
+ const char *internal_name,
+ int ordinal)
+{
+ def_file_export *e;
+ int max_exports = ROUND_UP(def->num_exports, 32);
+
+ if (def->num_exports >= max_exports)
+ {
+ max_exports = ROUND_UP(def->num_exports + 1, 32);
+ if (def->exports)
+ def->exports = xrealloc (def->exports,
+ max_exports * sizeof (def_file_export));
+ else
+ def->exports = xmalloc (max_exports * sizeof (def_file_export));
+ }
+ e = def->exports + def->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->ordinal = ordinal;
+ def->num_exports++;
+ return e;
+}
+
+def_file_module *
+def_get_module (def_file *def, const char *name)
+{
+ def_file_module *s;
+
+ for (s = def->modules; s; s = s->next)
+ if (strcmp (s->name, name) == 0)
+ return s;
+
+ return NULL;
+}
+
+static def_file_module *
+def_stash_module (def_file *def, const char *name)
+{
+ def_file_module *s;
+
+ if ((s = def_get_module (def, name)) != NULL)
+ return s;
+ s = xmalloc (sizeof (def_file_module) + strlen (name));
+ s->next = def->modules;
+ def->modules = s;
+ s->user_data = 0;
+ strcpy (s->name, name);
+ return s;
+}
+
+def_file_import *
+def_file_add_import (def_file *def,
+ const char *name,
+ const char *module,
+ int ordinal,
+ const char *internal_name)
+{
+ def_file_import *i;
+ int max_imports = ROUND_UP (def->num_imports, 16);
+
+ if (def->num_imports >= max_imports)
+ {
+ max_imports = ROUND_UP (def->num_imports+1, 16);
+
+ if (def->imports)
+ def->imports = xrealloc (def->imports,
+ max_imports * sizeof (def_file_import));
+ else
+ def->imports = xmalloc (max_imports * sizeof (def_file_import));
+ }
+ i = def->imports + def->num_imports;
+ memset (i, 0, sizeof (def_file_import));
+ if (name)
+ i->name = xstrdup (name);
+ if (module)
+ i->module = def_stash_module (def, module);
+ i->ordinal = ordinal;
+ if (internal_name)
+ i->internal_name = xstrdup (internal_name);
+ else
+ i->internal_name = i->name;
+ def->num_imports++;
+
+ return i;
+}
+
+struct
+{
+ char *param;
+ int token;
+}
+diropts[] =
+{
+ { "-heap", HEAPSIZE },
+ { "-stack", STACKSIZE },
+ { "-attr", SECTIONS },
+ { "-export", EXPORTS },
+ { 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++)
+ {
+ int 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)
+{
+ 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);
+ 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)
+{
+ 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);
+ 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 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 },
+ { "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.number = strtoul (buffer, 0, 0);
+#if TRACE
+ printf ("lex: `%s' returns NUMBER %d\n", buffer, yylval.number);
+#endif
+ return NUMBER;
+ }
+
+ 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 == '.' || 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.17/ld/dep-in.sed b/binutils-2.17/ld/dep-in.sed
new file mode 100644
index 00000000..0bf6ffe3
--- /dev/null
+++ b/binutils-2.17/ld/dep-in.sed
@@ -0,0 +1,21 @@
+:loop
+/\\$/N
+/\\$/b 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/\\\n */ /g
+
+s/ *$//
+s/ */ /g
+/:$/d
+
+s/\(.\{50\}[^ ]*\) /\1 \\\
+ /g
diff --git a/binutils-2.17/ld/elf-hints-local.h b/binutils-2.17/ld/elf-hints-local.h
new file mode 100644
index 00000000..69408180
--- /dev/null
+++ b/binutils-2.17/ld/elf-hints-local.h
@@ -0,0 +1,44 @@
+/* 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_
+
+/* Hints file produced by ldconfig. */
+struct elfhints_hdr
+{
+ u_int32_t magic; /* Magic number. */
+ u_int32_t version; /* File version (1). */
+ u_int32_t strtab; /* Offset of string table in file. */
+ u_int32_t strsize; /* Size of string table. */
+ u_int32_t dirlist; /* Offset of directory list in string table. */
+ u_int32_t dirlistlen; /* strlen(dirlist). */
+ u_int32_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.17/ld/emulparams/README b/binutils-2.17/ld/emulparams/README
new file mode 100644
index 00000000..b3d6d26c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/aix5ppc.sh b/binutils-2.17/ld/emulparams/aix5ppc.sh
new file mode 100644
index 00000000..ff945305
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/aix5rs6.sh b/binutils-2.17/ld/emulparams/aix5rs6.sh
new file mode 100644
index 00000000..958e4c1f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/aixppc.sh b/binutils-2.17/ld/emulparams/aixppc.sh
new file mode 100644
index 00000000..9307693a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/aixrs6.sh b/binutils-2.17/ld/emulparams/aixrs6.sh
new file mode 100644
index 00000000..6033dc17
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/alpha.sh b/binutils-2.17/ld/emulparams/alpha.sh
new file mode 100644
index 00000000..141923f7
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/alpha.sh
@@ -0,0 +1,3 @@
+SCRIPT_NAME=alpha
+OUTPUT_FORMAT="ecoff-littlealpha"
+ARCH=alpha
diff --git a/binutils-2.17/ld/emulparams/arcelf.sh b/binutils-2.17/ld/emulparams/arcelf.sh
new file mode 100644
index 00000000..b1c9c176
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/arcelf.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-littlearc"
+LITTLE_OUTPUT_FORMAT="elf32-littlearc"
+BIG_OUTPUT_FORMAT="elf32-bigarc"
+TEXT_START_ADDR=0x0
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x0
+ARCH=arc
+MACHINE=
+ENTRY=start
+#TEMPLATE_NAME=elf32
diff --git a/binutils-2.17/ld/emulparams/arm_epoc_pe.sh b/binutils-2.17/ld/emulparams/arm_epoc_pe.sh
new file mode 100644
index 00000000..7cc4b220
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/arm_epoc_pe.sh
@@ -0,0 +1,10 @@
+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
+ENTRY="_mainCRTStartup"
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.17/ld/emulparams/armaoutb.sh b/binutils-2.17/ld/emulparams/armaoutb.sh
new file mode 100644
index 00000000..59ab6f14
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armaoutb.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=armaout
+OUTPUT_FORMAT="a.out-arm-big"
+HEADER_START_ADDR=0x8000
+TEXT_START_ADDR=0x8000
+NONPAGED_TEXT_START_ADDRESS=0x8000
+TARGET_PAGE_SIZE=32768
+ARCH=arm
diff --git a/binutils-2.17/ld/emulparams/armaoutl.sh b/binutils-2.17/ld/emulparams/armaoutl.sh
new file mode 100644
index 00000000..9501f33e
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armaoutl.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=armaout
+OUTPUT_FORMAT="a.out-arm-little"
+HEADER_START_ADDR=0x8000
+TEXT_START_ADDR=0x8000
+NONPAGED_TEXT_START_ADDRESS=0x8000
+TARGET_PAGE_SIZE=32768
+ARCH=arm
diff --git a/binutils-2.17/ld/emulparams/armcoff.sh b/binutils-2.17/ld/emulparams/armcoff.sh
new file mode 100644
index 00000000..91df7d3c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/armelf.sh b/binutils-2.17/ld/emulparams/armelf.sh
new file mode 100644
index 00000000..ec04075d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armelf.sh
@@ -0,0 +1,39 @@
+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)'
+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)) }
+ .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) }'
+OTHER_READONLY_SECTIONS="
+ .ARM.extab ${RELOCATING-0} : { *(.ARM.extab${RELOCATING+* .gnu.linkonce.armextab.*}) }
+ ${RELOCATING+ __exidx_start = .; }
+ .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) }
+ ${RELOCATING+ __exidx_end = .; }"
+
+DATA_START_SYMBOLS='__data_start = . ;';
+
+GENERATE_SHLIB_SCRIPT=yes
+
+ARCH=arm
+MACHINE=
+# We should upgrade to a newer binutils and use -z max-page-size and
+# -z common-page-size instead. This breaks compatibility with other
+# arm-eabi toolchain.
+#MAXPAGESIZE=256
+MAXPAGESIZE=4096
+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.17/ld/emulparams/armelf_fbsd.sh b/binutils-2.17/ld/emulparams/armelf_fbsd.sh
new file mode 100644
index 00000000..ee9520dc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/armelf_linux.sh b/binutils-2.17/ld/emulparams/armelf_linux.sh
new file mode 100644
index 00000000..39b7f656
--- /dev/null
+++ b/binutils-2.17/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=0x8000
+COMMONPAGESIZE=0x1000
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=armelf
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+
+DATA_START_SYMBOLS='__data_start = . ;';
+OTHER_TEXT_SECTIONS='*(.glue_7t) *(.glue_7)'
+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.17/ld/emulparams/armelf_linux_eabi.sh b/binutils-2.17/ld/emulparams/armelf_linux_eabi.sh
new file mode 100644
index 00000000..f6d47573
--- /dev/null
+++ b/binutils-2.17/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+ __exidx_start = .; }
+ .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) }
+ ${RELOCATING+ __exidx_end = .; }"
+
diff --git a/binutils-2.17/ld/emulparams/armelf_nbsd.sh b/binutils-2.17/ld/emulparams/armelf_nbsd.sh
new file mode 100644
index 00000000..3d948391
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armelf_nbsd.sh
@@ -0,0 +1,7 @@
+. ${srcdir}/emulparams/armelf.sh
+MAXPAGESIZE=0x8000
+TEXT_START_ADDR=0x00008000
+TARGET2_TYPE=got-rel
+
+unset STACK_ADDR
+unset EMBEDDED
diff --git a/binutils-2.17/ld/emulparams/armelf_vxworks.sh b/binutils-2.17/ld/emulparams/armelf_vxworks.sh
new file mode 100644
index 00000000..7b6445e8
--- /dev/null
+++ b/binutils-2.17/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=0x1000
+. ${srcdir}/emulparams/vxworks.sh
diff --git a/binutils-2.17/ld/emulparams/armelfb.sh b/binutils-2.17/ld/emulparams/armelfb.sh
new file mode 100644
index 00000000..2d8f3821
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armelfb.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/armelf.sh
+OUTPUT_FORMAT="elf32-bigarm"
diff --git a/binutils-2.17/ld/emulparams/armelfb_linux.sh b/binutils-2.17/ld/emulparams/armelfb_linux.sh
new file mode 100644
index 00000000..9ce9e9ab
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armelfb_linux.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/armelf_linux.sh
+OUTPUT_FORMAT="elf32-bigarm"
diff --git a/binutils-2.17/ld/emulparams/armelfb_linux_eabi.sh b/binutils-2.17/ld/emulparams/armelfb_linux_eabi.sh
new file mode 100644
index 00000000..f71c7416
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/armelfb_nbsd.sh b/binutils-2.17/ld/emulparams/armelfb_nbsd.sh
new file mode 100644
index 00000000..7ab6ce06
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armelfb_nbsd.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/armelf_nbsd.sh
+OUTPUT_FORMAT="elf32-bigarm"
diff --git a/binutils-2.17/ld/emulparams/armnbsd.sh b/binutils-2.17/ld/emulparams/armnbsd.sh
new file mode 100644
index 00000000..fc277916
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armnbsd.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+OUTPUT_FORMAT="a.out-arm-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=arm
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
+NONPAGED_TEXT_START_ADDR=0x1000
diff --git a/binutils-2.17/ld/emulparams/armnto.sh b/binutils-2.17/ld/emulparams/armnto.sh
new file mode 100644
index 00000000..64296129
--- /dev/null
+++ b/binutils-2.17/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)'
+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=0x1000
+
+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.17/ld/emulparams/armpe.sh b/binutils-2.17/ld/emulparams/armpe.sh
new file mode 100644
index 00000000..5db5faf3
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armpe.sh
@@ -0,0 +1,15 @@
+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
+ENTRY="_mainCRTStartup"
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.17/ld/emulparams/armsymbian.sh b/binutils-2.17/ld/emulparams/armsymbian.sh
new file mode 100644
index 00000000..a52d05b2
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/armsymbian.sh
@@ -0,0 +1,25 @@
+. ${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+ .ARM.exidx\$\$Base = . ; }
+ ${RELOCATING+ __exidx_start = .; }
+ .ARM.exidx ${RELOCATING-0} : { *(.ARM.exidx${RELOCATING+* .gnu.linkonce.armexidx.*}) }
+ ${RELOCATING+ __exidx_end = .; }
+ ${RELOCATING+ .ARM.exidx\$\$Limit = . ; }"
+
+# This value should match ELF_MAXPAGESIZE in BFD. Otherwise, elf.c
+# will not place read-write sections in a separate ELF segment from
+# the read-only sections.
+MAXPAGESIZE=0x8000
diff --git a/binutils-2.17/ld/emulparams/avr1.sh b/binutils-2.17/ld/emulparams/avr1.sh
new file mode 100644
index 00000000..4ccc9ed3
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/avr1.sh
@@ -0,0 +1,10 @@
+ARCH=avr:1
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+TEXT_LENGTH=8K
+DATA_LENGTH=0
diff --git a/binutils-2.17/ld/emulparams/avr2.sh b/binutils-2.17/ld/emulparams/avr2.sh
new file mode 100644
index 00000000..9c98ce1d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/avr2.sh
@@ -0,0 +1,10 @@
+ARCH=avr:2
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+TEXT_LENGTH=8K
+DATA_LENGTH=0xffa0
diff --git a/binutils-2.17/ld/emulparams/avr3.sh b/binutils-2.17/ld/emulparams/avr3.sh
new file mode 100644
index 00000000..0434d074
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/avr3.sh
@@ -0,0 +1,10 @@
+ARCH=avr:3
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+TEXT_LENGTH=128K
+DATA_LENGTH=0xffa0
diff --git a/binutils-2.17/ld/emulparams/avr4.sh b/binutils-2.17/ld/emulparams/avr4.sh
new file mode 100644
index 00000000..33fc83af
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/avr4.sh
@@ -0,0 +1,10 @@
+ARCH=avr:4
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+TEXT_LENGTH=8K
+DATA_LENGTH=0xffa0
diff --git a/binutils-2.17/ld/emulparams/avr5.sh b/binutils-2.17/ld/emulparams/avr5.sh
new file mode 100644
index 00000000..5b175b82
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/avr5.sh
@@ -0,0 +1,10 @@
+ARCH=avr:5
+MACHINE=
+SCRIPT_NAME=avr
+OUTPUT_FORMAT="elf32-avr"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+TEXT_LENGTH=128K
+DATA_LENGTH=0xffa0
diff --git a/binutils-2.17/ld/emulparams/bfin.sh b/binutils-2.17/ld/emulparams/bfin.sh
new file mode 100755
index 00000000..5e7adda4
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/bfin.sh
@@ -0,0 +1,14 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-bfin"
+TEXT_START_ADDR=0x0
+MAXPAGESIZE=0x1000
+TARGET_PAGE_SIZE=0x1000
+NONPAGED_TEXT_START_ADDR=${TEXT_START_ADDR}
+ARCH=bfin
+MACHINE=
+ENTRY=__start
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+EMBEDDED=yes
+DATA_END_SYMBOLS="__edata = .; PROVIDE (_edata = .);"
+END_SYMBOLS="__end = .; PROVIDE (_end = .);"
diff --git a/binutils-2.17/ld/emulparams/coff_i860.sh b/binutils-2.17/ld/emulparams/coff_i860.sh
new file mode 100644
index 00000000..03b64931
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/coff_sparc.sh b/binutils-2.17/ld/emulparams/coff_sparc.sh
new file mode 100644
index 00000000..0cf852a7
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/coff_sparc.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=sparccoff
+OUTPUT_FORMAT="coff-sparc"
+# following are dubious (borrowed from sparc lynx)
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0
+NONPAGED_TEXT_START_ADDR=0x1000
+ARCH=sparc
diff --git a/binutils-2.17/ld/emulparams/crisaout.sh b/binutils-2.17/ld/emulparams/crisaout.sh
new file mode 100644
index 00000000..bb9135aa
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/crisaout.sh
@@ -0,0 +1,7 @@
+# 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
+NONPAGED_TEXT_START_ADDR=0
+ARCH=cris
diff --git a/binutils-2.17/ld/emulparams/criself.sh b/binutils-2.17/ld/emulparams/criself.sh
new file mode 100644
index 00000000..0478f345
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/criself.sh
@@ -0,0 +1,98 @@
+# 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"
+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='.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.17/ld/emulparams/crislinux.sh b/binutils-2.17/ld/emulparams/crislinux.sh
new file mode 100644
index 00000000..98d12f39
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/crislinux.sh
@@ -0,0 +1,39 @@
+# 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"
+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=8192
+
+# 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.17/ld/emulparams/d10velf.sh b/binutils-2.17/ld/emulparams/d10velf.sh
new file mode 100644
index 00000000..c8de5c4a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/d30v_e.sh b/binutils-2.17/ld/emulparams/d30v_e.sh
new file mode 100644
index 00000000..a8ab5a25
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/d30v_e.sh
@@ -0,0 +1,20 @@
+MACHINE=
+SCRIPT_NAME=elfd30v
+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.17/ld/emulparams/d30v_o.sh b/binutils-2.17/ld/emulparams/d30v_o.sh
new file mode 100644
index 00000000..6cbcb42a
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/d30v_o.sh
@@ -0,0 +1,20 @@
+MACHINE=
+SCRIPT_NAME=elfd30v
+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.17/ld/emulparams/d30velf.sh b/binutils-2.17/ld/emulparams/d30velf.sh
new file mode 100644
index 00000000..949de786
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/d30velf.sh
@@ -0,0 +1,20 @@
+MACHINE=
+SCRIPT_NAME=elfd30v
+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.17/ld/emulparams/delta68.sh b/binutils-2.17/ld/emulparams/delta68.sh
new file mode 100644
index 00000000..e3c59099
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32_dlx.sh b/binutils-2.17/ld/emulparams/elf32_dlx.sh
new file mode 100644
index 00000000..d3ff81c3
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32_dlx.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=dlx
+TEMPLATE_NAME=generic
+OUTPUT_FORMAT="elf32-dlx"
+ARCH=dlx
+MACHINE=
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=1
+EMBEDDED=yes
+MAXPAGESIZE=1
diff --git a/binutils-2.17/ld/emulparams/elf32_i860.sh b/binutils-2.17/ld/emulparams/elf32_i860.sh
new file mode 100644
index 00000000..6769fa54
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32_i860.sh
@@ -0,0 +1,9 @@
+# A work in progress...
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i860-little"
+BIG_OUTPUT_FORMAT="elf32-i860"
+LITTLE_OUTPUT_FORMAT="elf32-i860-little"
+TEXT_START_ADDR=0
+PAGE_SIZE=0x1000
+MAXPAGESIZE=0x1000
+ARCH=i860
diff --git a/binutils-2.17/ld/emulparams/elf32_i960.sh b/binutils-2.17/ld/emulparams/elf32_i960.sh
new file mode 100644
index 00000000..10ec3fa5
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32_i960.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=elf
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf32-i960"
+ARCH=i960
+MACHINE=
+TEXT_START_ADDR=0
+EMBEDDED=yes
+MAXPAGESIZE=0x2000
diff --git a/binutils-2.17/ld/emulparams/elf32_sparc.sh b/binutils-2.17/ld/emulparams/elf32_sparc.sh
new file mode 100644
index 00000000..af232529
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32_sparc.sh
@@ -0,0 +1,14 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-sparc"
+TEXT_START_ADDR=0x10000
+MAXPAGESIZE=0x10000
+COMMONPAGESIZE=0x2000
+NONPAGED_TEXT_START_ADDR=0x10000
+ALIGNMENT=8
+ARCH=sparc
+MACHINE=
+TEMPLATE_NAME=elf32
+DATA_PLT=
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.17/ld/emulparams/elf32_sparc_vxworks.sh b/binutils-2.17/ld/emulparams/elf32_sparc_vxworks.sh
new file mode 100644
index 00000000..12a9b384
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32am33lin.sh b/binutils-2.17/ld/emulparams/elf32am33lin.sh
new file mode 100644
index 00000000..f8b3a890
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32am33lin.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-am33lin"
+TEXT_START_ADDR=0x8000000
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x8000000
+ARCH=mn10300
+MACHINE=
+NOP=0xcbcb
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+
diff --git a/binutils-2.17/ld/emulparams/elf32b4300.sh b/binutils-2.17/ld/emulparams/elf32b4300.sh
new file mode 100644
index 00000000..d3e43547
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32b4300.sh
@@ -0,0 +1,10 @@
+# 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 NONPAGED_TEXT_START_ADDR
+unset SHLIB_TEXT_START_ADDR
+EXECUTABLE_SYMBOLS='_DYNAMIC_LINK = 0;'
+DYNAMIC_LINK=FALSE
diff --git a/binutils-2.17/ld/emulparams/elf32bfinfd.sh b/binutils-2.17/ld/emulparams/elf32bfinfd.sh
new file mode 100644
index 00000000..9047c6a7
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32bfinfd.sh
@@ -0,0 +1,16 @@
+. ${srcdir}/emulparams/bfin.sh
+unset STACK_ADDR
+OUTPUT_FORMAT="elf32-bfinfdpic"
+MAXPAGESIZE=0x4000
+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.17/ld/emulparams/elf32bmip.sh b/binutils-2.17/ld/emulparams/elf32bmip.sh
new file mode 100644
index 00000000..61485657
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32bmip.sh
@@ -0,0 +1,50 @@
+# If you change this file, please also look at files which source this one:
+# elf32b4300.sh elf32bsmip.sh elf32btsmip.sh elf32ebmip.sh elf32lmip.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=0x40000
+COMMONPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x0400000
+SHLIB_TEXT_START_ADDR=0x5ffe0000
+TEXT_DYNAMIC=
+INITIAL_READONLY_SECTIONS="
+ .reginfo ${RELOCATING-0} : { *(.reginfo) }
+"
+OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
+# 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;
+'
+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
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
diff --git a/binutils-2.17/ld/emulparams/elf32bmipn32-defs.sh b/binutils-2.17/ld/emulparams/elf32bmipn32-defs.sh
new file mode 100644
index 00000000..b81ac49e
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32bmipn32-defs.sh
@@ -0,0 +1,64 @@
+# 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
+
+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=0x100000
+ENTRY=__start
+
+# 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;
+'
+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=".MIPS.options : { *(.MIPS.options) }"
+# 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.17/ld/emulparams/elf32bmipn32.sh b/binutils-2.17/ld/emulparams/elf32bmipn32.sh
new file mode 100755
index 00000000..a320eb23
--- /dev/null
+++ b/binutils-2.17/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=0x1000
+
+# 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.17/ld/emulparams/elf32bsmip.sh b/binutils-2.17/ld/emulparams/elf32bsmip.sh
new file mode 100644
index 00000000..dfe0fe06
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32bsmip.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf32bmip.sh
+ENTRY=__start
+EXTRA_EM_FILE=irix
diff --git a/binutils-2.17/ld/emulparams/elf32btsmip.sh b/binutils-2.17/ld/emulparams/elf32btsmip.sh
new file mode 100644
index 00000000..e29e045d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32btsmipn32.sh b/binutils-2.17/ld/emulparams/elf32btsmipn32.sh
new file mode 100644
index 00000000..5ca6797e
--- /dev/null
+++ b/binutils-2.17/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=0x1000
+
+# 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.17/ld/emulparams/elf32cr16c.sh b/binutils-2.17/ld/emulparams/elf32cr16c.sh
new file mode 100644
index 00000000..e78e5edc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32crx.sh b/binutils-2.17/ld/emulparams/elf32crx.sh
new file mode 100644
index 00000000..24960ec5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32ebmip.sh b/binutils-2.17/ld/emulparams/elf32ebmip.sh
new file mode 100644
index 00000000..704b43ed
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ebmip.sh
@@ -0,0 +1,2 @@
+EMBEDDED=yes
+. ${srcdir}/emulparams/elf32bmip.sh
diff --git a/binutils-2.17/ld/emulparams/elf32ebmipvxworks.sh b/binutils-2.17/ld/emulparams/elf32ebmipvxworks.sh
new file mode 100644
index 00000000..4145488a
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ebmipvxworks.sh
@@ -0,0 +1,11 @@
+. ${srcdir}/emulparams/elf32bmip.sh
+
+OUTPUT_FORMAT="elf32-bigmips-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.17/ld/emulparams/elf32elmip.sh b/binutils-2.17/ld/emulparams/elf32elmip.sh
new file mode 100644
index 00000000..c94e503d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32elmip.sh
@@ -0,0 +1,2 @@
+EMBEDDED=yes
+. ${srcdir}/emulparams/elf32lmip.sh
diff --git a/binutils-2.17/ld/emulparams/elf32elmipvxworks.sh b/binutils-2.17/ld/emulparams/elf32elmipvxworks.sh
new file mode 100644
index 00000000..c1239441
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32fr30.sh b/binutils-2.17/ld/emulparams/elf32fr30.sh
new file mode 100755
index 00000000..069c623c
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32fr30.sh
@@ -0,0 +1,10 @@
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-fr30"
+TEXT_START_ADDR=0x10000
+ARCH=fr30
+MAXPAGESIZE=256
+ENTRY=_start
+EMBEDDED=yes
+NOP=0x9fa09fa0
+OTHER_SYMBOLS='PROVIDE (__stack = 0x200000);'
diff --git a/binutils-2.17/ld/emulparams/elf32frv.sh b/binutils-2.17/ld/emulparams/elf32frv.sh
new file mode 100755
index 00000000..16773b71
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32frv.sh
@@ -0,0 +1,19 @@
+MACHINE=
+SCRIPT_NAME=elf
+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.17/ld/emulparams/elf32frvfd.sh b/binutils-2.17/ld/emulparams/elf32frvfd.sh
new file mode 100644
index 00000000..42b36f7d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32frvfd.sh
@@ -0,0 +1,16 @@
+. ${srcdir}/emulparams/elf32frv.sh
+unset STACK_ADDR
+OUTPUT_FORMAT="elf32-frvfdpic"
+MAXPAGESIZE=0x4000
+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.17/ld/emulparams/elf32i370.sh b/binutils-2.17/ld/emulparams/elf32i370.sh
new file mode 100644
index 00000000..d9d5d856
--- /dev/null
+++ b/binutils-2.17/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=0x40000
+ARCH=i370
+MACHINE=
diff --git a/binutils-2.17/ld/emulparams/elf32ip2k.sh b/binutils-2.17/ld/emulparams/elf32ip2k.sh
new file mode 100644
index 00000000..17fb7aba
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ip2k.sh
@@ -0,0 +1,20 @@
+TEMPLATE_NAME=elf32
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-ip2k"
+# 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.17/ld/emulparams/elf32iq10.sh b/binutils-2.17/ld/emulparams/elf32iq10.sh
new file mode 100755
index 00000000..1721f522
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32iq10.sh
@@ -0,0 +1,11 @@
+MACHINE=
+SCRIPT_NAME=iq2000
+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.17/ld/emulparams/elf32iq2000.sh b/binutils-2.17/ld/emulparams/elf32iq2000.sh
new file mode 100755
index 00000000..18f239da
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32iq2000.sh
@@ -0,0 +1,14 @@
+MACHINE=
+SCRIPT_NAME=iq2000
+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.17/ld/emulparams/elf32l4300.sh b/binutils-2.17/ld/emulparams/elf32l4300.sh
new file mode 100644
index 00000000..865792af
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32lmip.sh b/binutils-2.17/ld/emulparams/elf32lmip.sh
new file mode 100644
index 00000000..14d4ded7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32lppc.sh b/binutils-2.17/ld/emulparams/elf32lppc.sh
new file mode 100644
index 00000000..18cce489
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32lppcnto.sh b/binutils-2.17/ld/emulparams/elf32lppcnto.sh
new file mode 100644
index 00000000..1f190554
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32lppcnto.sh
@@ -0,0 +1,5 @@
+. ${srcdir}/emulparams/elf32ppc.sh
+OUTPUT_FORMAT="elf32-powerpcle"
+MAXPAGESIZE=0x1000
+TEXT_START_ADDR=0x48040000
+
diff --git a/binutils-2.17/ld/emulparams/elf32lppcsim.sh b/binutils-2.17/ld/emulparams/elf32lppcsim.sh
new file mode 100644
index 00000000..e7438529
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32lppcsim.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32lppc.sh
+TEXT_START_ADDR=0x10000000
diff --git a/binutils-2.17/ld/emulparams/elf32lsmip.sh b/binutils-2.17/ld/emulparams/elf32lsmip.sh
new file mode 100644
index 00000000..62e4f98d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32lsmip.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32lmip.sh
+ENTRY=__start
diff --git a/binutils-2.17/ld/emulparams/elf32ltsmip.sh b/binutils-2.17/ld/emulparams/elf32ltsmip.sh
new file mode 100644
index 00000000..4a660f09
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ltsmip.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32btsmip.sh
+OUTPUT_FORMAT="elf32-tradlittlemips"
diff --git a/binutils-2.17/ld/emulparams/elf32ltsmipn32.sh b/binutils-2.17/ld/emulparams/elf32ltsmipn32.sh
new file mode 100644
index 00000000..276477d2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32m32c.sh b/binutils-2.17/ld/emulparams/elf32m32c.sh
new file mode 100644
index 00000000..eaf2c4e8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32mcore.sh b/binutils-2.17/ld/emulparams/elf32mcore.sh
new file mode 100644
index 00000000..930a9c3c
--- /dev/null
+++ b/binutils-2.17/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"
+PAGE_SIZE=0x1000
+TARGET_PAGE_SIZE=0x400
+MAXPAGESIZE=0x1000
+TEXT_START_ADDR=0
+NONPAGED_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.17/ld/emulparams/elf32mipswindiss.sh b/binutils-2.17/ld/emulparams/elf32mipswindiss.sh
new file mode 100644
index 00000000..4f1148b9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32mt.sh b/binutils-2.17/ld/emulparams/elf32mt.sh
new file mode 100644
index 00000000..667979e6
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32mt.sh
@@ -0,0 +1,24 @@
+MACHINE=
+SCRIPT_NAME=elf
+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.17/ld/emulparams/elf32openrisc.sh b/binutils-2.17/ld/emulparams/elf32openrisc.sh
new file mode 100755
index 00000000..a65dcd89
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32openrisc.sh
@@ -0,0 +1,10 @@
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-openrisc"
+TEXT_START_ADDR=0x10000
+ARCH=openrisc
+MAXPAGESIZE=0x1000
+ENTRY=_start
+EMBEDDED=yes
+NOP=0x15000000
+
diff --git a/binutils-2.17/ld/emulparams/elf32ppc.sh b/binutils-2.17/ld/emulparams/elf32ppc.sh
new file mode 100644
index 00000000..587b8d3a
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ppc.sh
@@ -0,0 +1,15 @@
+# If you change this file, please also look at files which source this one:
+# elf32lppc.sh elf32ppclinux.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) }"
+PLT=".plt ${RELOCATING-0} : SPECIAL { *(.plt) }"
+GOTPLT="${PLT}"
+OTHER_TEXT_SECTIONS="*(.glink)"
+EXTRA_EM_FILE=ppc32elf
diff --git a/binutils-2.17/ld/emulparams/elf32ppc_fbsd.sh b/binutils-2.17/ld/emulparams/elf32ppc_fbsd.sh
new file mode 100644
index 00000000..2bac85c7
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ppc_fbsd.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32ppc.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
diff --git a/binutils-2.17/ld/emulparams/elf32ppccommon.sh b/binutils-2.17/ld/emulparams/elf32ppccommon.sh
new file mode 100644
index 00000000..b5fbc8d8
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ppccommon.sh
@@ -0,0 +1,49 @@
+# 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"
+TEXT_START_ADDR=0x01800000
+MAXPAGESIZE=0x10000
+COMMONPAGESIZE=0x1000
+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.17/ld/emulparams/elf32ppclinux.sh b/binutils-2.17/ld/emulparams/elf32ppclinux.sh
new file mode 100644
index 00000000..262731ab
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32ppcnto.sh b/binutils-2.17/ld/emulparams/elf32ppcnto.sh
new file mode 100644
index 00000000..dd4a79cb
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ppcnto.sh
@@ -0,0 +1,4 @@
+. ${srcdir}/emulparams/elf32ppc.sh
+MAXPAGESIZE=0x1000
+TEXT_START_ADDR=0x48040000
+
diff --git a/binutils-2.17/ld/emulparams/elf32ppcsim.sh b/binutils-2.17/ld/emulparams/elf32ppcsim.sh
new file mode 100644
index 00000000..c3466cfa
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ppcsim.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf32ppc.sh
+TEXT_START_ADDR=0x10000000
diff --git a/binutils-2.17/ld/emulparams/elf32ppcvxworks.sh b/binutils-2.17/ld/emulparams/elf32ppcvxworks.sh
new file mode 100644
index 00000000..1bc3f309
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32ppcwindiss.sh b/binutils-2.17/ld/emulparams/elf32ppcwindiss.sh
new file mode 100644
index 00000000..c0e6138c
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32ppcwindiss.sh
@@ -0,0 +1,23 @@
+TEMPLATE_NAME=elf32
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-powerpc"
+ARCH=powerpc
+MACHINE=
+EMBEDDED=yes
+MAXPAGESIZE=0x10000
+
+# 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.17/ld/emulparams/elf32vax.sh b/binutils-2.17/ld/emulparams/elf32vax.sh
new file mode 100644
index 00000000..56bbab7d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32vax.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-vax"
+TEXT_START_ADDR=0x10000
+MAXPAGESIZE=0x10000
+NONPAGED_TEXT_START_ADDR=0x1000
+ARCH=vax
+MACHINE=
+NOP=0x0101
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.17/ld/emulparams/elf32xc16x.sh b/binutils-2.17/ld/emulparams/elf32xc16x.sh
new file mode 100644
index 00000000..808feedd
--- /dev/null
+++ b/binutils-2.17/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=256
+ENTRY=_start
+EMBEDDED=yes
diff --git a/binutils-2.17/ld/emulparams/elf32xc16xl.sh b/binutils-2.17/ld/emulparams/elf32xc16xl.sh
new file mode 100644
index 00000000..333f2a6f
--- /dev/null
+++ b/binutils-2.17/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=256
+ENTRY=_start
+EMBEDDED=yes
diff --git a/binutils-2.17/ld/emulparams/elf32xc16xs.sh b/binutils-2.17/ld/emulparams/elf32xc16xs.sh
new file mode 100644
index 00000000..df36f410
--- /dev/null
+++ b/binutils-2.17/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=256
+ENTRY=_start
+EMBEDDED=yes
diff --git a/binutils-2.17/ld/emulparams/elf32xstormy16.sh b/binutils-2.17/ld/emulparams/elf32xstormy16.sh
new file mode 100644
index 00000000..a512ec36
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf32xtensa.sh b/binutils-2.17/ld/emulparams/elf32xtensa.sh
new file mode 100644
index 00000000..c4b13b9a
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf32xtensa.sh
@@ -0,0 +1,35 @@
+# First set some configuration-specific variables
+. ${srcdir}/emulparams/xtensa-config.sh
+
+# See genscripts.sh and ../scripttempl/elfxtensa.sc for the meaning of these.
+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"
+TEXT_START_ADDR=0x400000
+NONPAGED_TEXT_START_ADDR=0x400000
+ARCH=xtensa
+MACHINE=
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_COMBRELOC_SCRIPT=yes
+NO_SMALL_DATA=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} : { KEEP (*(.xt_except_table)) }
+"
+OTHER_READWRITE_SECTIONS="
+ .xt_except_desc ${RELOCATING-0} :
+ {
+ *(.xt_except_desc${RELOCATING+ .gnu.linkonce.h.*})
+ ${RELOCATING+*(.xt_except_desc_end)}
+ }
+"
+OTHER_SECTIONS="
+ .xt.lit 0 : { *(.xt.lit${RELOCATING+ .xt.lit.* .gnu.linkonce.p.*}) }
+ .xt.insn 0 : { *(.xt.insn${RELOCATING+ .gnu.linkonce.x.*}) }
+ .xt.prop 0 : { *(.xt.prop${RELOCATING+ .gnu.linkonce.prop.*}) }
+"
diff --git a/binutils-2.17/ld/emulparams/elf64_aix.sh b/binutils-2.17/ld/emulparams/elf64_aix.sh
new file mode 100644
index 00000000..738fea94
--- /dev/null
+++ b/binutils-2.17/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=0x10000
+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.17/ld/emulparams/elf64_ia64.sh b/binutils-2.17/ld/emulparams/elf64_ia64.sh
new file mode 100644
index 00000000..c5be56e8
--- /dev/null
+++ b/binutils-2.17/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=0x10000
+# 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=0x4000
+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.17/ld/emulparams/elf64_ia64_fbsd.sh b/binutils-2.17/ld/emulparams/elf64_ia64_fbsd.sh
new file mode 100644
index 00000000..ab7e78f2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf64_s390.sh b/binutils-2.17/ld/emulparams/elf64_s390.sh
new file mode 100644
index 00000000..ea75d319
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf64_s390.sh
@@ -0,0 +1,35 @@
+SCRIPT_NAME=elf
+ELFSIZE=64
+OUTPUT_FORMAT="elf64-s390"
+TEXT_START_ADDR=0x80000000
+MAXPAGESIZE=0x1000
+COMMONPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x80000000
+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.17/ld/emulparams/elf64_sparc.sh b/binutils-2.17/ld/emulparams/elf64_sparc.sh
new file mode 100644
index 00000000..0c0f5d89
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf64_sparc.sh
@@ -0,0 +1,51 @@
+SCRIPT_NAME=elf
+ELFSIZE=64
+TEMPLATE_NAME=elf32
+OUTPUT_FORMAT="elf64-sparc"
+MAXPAGESIZE=0x100000
+COMMONPAGESIZE=0x2000
+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
+ NONPAGED_TEXT_START_ADDR=0x100000000
+ ;;
+ *)
+ TEXT_START_ADDR=0x100000
+ NONPAGED_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.17/ld/emulparams/elf64_sparc_fbsd.sh b/binutils-2.17/ld/emulparams/elf64_sparc_fbsd.sh
new file mode 100644
index 00000000..232a3214
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf64_sparc_fbsd.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf64_sparc.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
diff --git a/binutils-2.17/ld/emulparams/elf64alpha.sh b/binutils-2.17/ld/emulparams/elf64alpha.sh
new file mode 100644
index 00000000..47a0bb00
--- /dev/null
+++ b/binutils-2.17/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"
+TEXT_START_ADDR="0x120000000"
+MAXPAGESIZE=0x10000
+COMMONPAGESIZE=0x2000
+NONPAGED_TEXT_START_ADDR="0x120000000"
+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.17/ld/emulparams/elf64alpha_fbsd.sh b/binutils-2.17/ld/emulparams/elf64alpha_fbsd.sh
new file mode 100644
index 00000000..fd4a0a41
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf64alpha_nbsd.sh b/binutils-2.17/ld/emulparams/elf64alpha_nbsd.sh
new file mode 100644
index 00000000..8116f48b
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf64alpha_nbsd.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf64alpha.sh
+ENTRY=__start
diff --git a/binutils-2.17/ld/emulparams/elf64bmip.sh b/binutils-2.17/ld/emulparams/elf64bmip.sh
new file mode 100755
index 00000000..a4ce6d49
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf64bmip.sh
@@ -0,0 +1,23 @@
+. ${srcdir}/emulparams/elf32bmipn32-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.17/ld/emulparams/elf64btsmip.sh b/binutils-2.17/ld/emulparams/elf64btsmip.sh
new file mode 100644
index 00000000..23a20c7b
--- /dev/null
+++ b/binutils-2.17/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/elf32bmipn32-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.17/ld/emulparams/elf64hppa.sh b/binutils-2.17/ld/emulparams/elf64hppa.sh
new file mode 100755
index 00000000..26c3153f
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf64hppa.sh
@@ -0,0 +1,22 @@
+. ${srcdir}/emulparams/hppa64linux.sh
+OUTPUT_FORMAT="elf64-hppa"
+LIB_PATH="=/usr/lib/pa20_64:=/opt/langtools/lib/pa20_64"
+TEXT_START_ADDR=0x4000000000001000
+DATA_ADDR=0x8000000000001000
+TARGET_PAGE_SIZE=4096
+MAXPAGESIZE=4096
+
+# 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
+
+# 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.17/ld/emulparams/elf64lppc.sh b/binutils-2.17/ld/emulparams/elf64lppc.sh
new file mode 100644
index 00000000..1c474935
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf64lppc.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf64ppc.sh
+OUTPUT_FORMAT="elf64-powerpcle"
+NOP=0x00000060
diff --git a/binutils-2.17/ld/emulparams/elf64ltsmip.sh b/binutils-2.17/ld/emulparams/elf64ltsmip.sh
new file mode 100644
index 00000000..efd6b7d8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf64mmix.sh b/binutils-2.17/ld/emulparams/elf64mmix.sh
new file mode 100644
index 00000000..22b207fc
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf64mmix.sh
@@ -0,0 +1,61 @@
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+ELFSIZE=64
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf64-mmix"
+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'
+
+# Setting this anywhere near the quite reasonable value of 0x10000
+# causes the binary to bloat to reach page alignment between segments.
+# Let's just have a 256-byte default page alignment. Having some
+# alignment at all gives a warm feeling but not much more.
+MAXPAGESIZE=256
+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.
+OTHER_TEXT_SECTIONS='
+ _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.17/ld/emulparams/elf64ppc.sh b/binutils-2.17/ld/emulparams/elf64ppc.sh
new file mode 100644
index 00000000..8285723f
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf64ppc.sh
@@ -0,0 +1,49 @@
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=ppc64elf
+ELFSIZE=64
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf64-powerpc"
+TEXT_START_ADDR=0x10000000
+#SEGMENT_SIZE=0x10000000
+MAXPAGESIZE=0x10000
+COMMONPAGESIZE=0x1000
+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
+OTHER_GOT_RELOC_SECTIONS="
+ .rela.toc ${RELOCATING-0} : { *(.rela.toc) }"
+OTHER_READWRITE_SECTIONS="
+ .toc1 ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { *(.toc1) }
+ .opd ${RELOCATING-0} :${RELOCATING+ ALIGN(8)} { KEEP (*(.opd)) }"
+
+# 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.17/ld/emulparams/elf_fbsd.sh b/binutils-2.17/ld/emulparams/elf_fbsd.sh
new file mode 100644
index 00000000..2ea646e9
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf_fbsd.sh
@@ -0,0 +1 @@
+ELF_INTERPRETER_NAME=\"/usr/libexec/ld-elf.so.1\"
diff --git a/binutils-2.17/ld/emulparams/elf_i386.sh b/binutils-2.17/ld/emulparams/elf_i386.sh
new file mode 100644
index 00000000..af7010b6
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf_i386.sh
@@ -0,0 +1,14 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+TEXT_START_ADDR=0x08048000
+MAXPAGESIZE=0x1000
+COMMONPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x08048000
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+NO_SMALL_DATA=yes
+SEPARATE_GOTPLT=12
diff --git a/binutils-2.17/ld/emulparams/elf_i386_be.sh b/binutils-2.17/ld/emulparams/elf_i386_be.sh
new file mode 100644
index 00000000..2c681b76
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf_i386_be.sh
@@ -0,0 +1,12 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+TEXT_START_ADDR=0x80000000
+#SHLIB_TEXT_START_ADDR=0x80000000
+NONPAGED_TEXT_START_ADDR=0x80000000
+MAXPAGESIZE=0x1000
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.17/ld/emulparams/elf_i386_chaos.sh b/binutils-2.17/ld/emulparams/elf_i386_chaos.sh
new file mode 100644
index 00000000..e018231f
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf_i386_chaos.sh
@@ -0,0 +1,11 @@
+SCRIPT_NAME=elf_chaos
+OUTPUT_FORMAT="elf32-i386"
+TEXT_START_ADDR=0x40000000
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x40000000
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.17/ld/emulparams/elf_i386_fbsd.sh b/binutils-2.17/ld/emulparams/elf_i386_fbsd.sh
new file mode 100644
index 00000000..23785983
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/elf_i386_ldso.sh b/binutils-2.17/ld/emulparams/elf_i386_ldso.sh
new file mode 100644
index 00000000..a477a693
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf_i386_ldso.sh
@@ -0,0 +1,12 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+TEXT_START_ADDR=0x08048000
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x08048000
+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.17/ld/emulparams/elf_i386_vxworks.sh b/binutils-2.17/ld/emulparams/elf_i386_vxworks.sh
new file mode 100644
index 00000000..8bce8f72
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf_i386_vxworks.sh
@@ -0,0 +1,14 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386-vxworks"
+TEXT_START_ADDR=0x08048000
+MAXPAGESIZE=0x1000
+COMMONPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x08048000
+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.17/ld/emulparams/elf_s390.sh b/binutils-2.17/ld/emulparams/elf_s390.sh
new file mode 100644
index 00000000..8d057dc3
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf_s390.sh
@@ -0,0 +1,13 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-s390"
+TEXT_START_ADDR=0x00400000
+MAXPAGESIZE=0x1000
+COMMONPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x00400000
+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.17/ld/emulparams/elf_x86_64.sh b/binutils-2.17/ld/emulparams/elf_x86_64.sh
new file mode 100644
index 00000000..35240df0
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf_x86_64.sh
@@ -0,0 +1,33 @@
+SCRIPT_NAME=elf
+ELFSIZE=64
+OUTPUT_FORMAT="elf64-x86-64"
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE=0x100000
+COMMONPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x400000
+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
+
+if [ "x${host}" = "x${target}" ]; then
+ case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*)
+ NATIVE=yes
+ esac
+fi
+
+# Linux modify the default library search path to first include
+# a 64-bit specific directory.
+case "$target" in
+ x86_64*-linux*)
+ case "$EMULATION_NAME" in
+ *64*) LIBPATH_SUFFIX=64 ;;
+ esac
+ ;;
+esac
diff --git a/binutils-2.17/ld/emulparams/elf_x86_64_fbsd.sh b/binutils-2.17/ld/emulparams/elf_x86_64_fbsd.sh
new file mode 100644
index 00000000..34258cb9
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/elf_x86_64_fbsd.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/elf_x86_64.sh
+. ${srcdir}/emulparams/elf_fbsd.sh
diff --git a/binutils-2.17/ld/emulparams/gld960.sh b/binutils-2.17/ld/emulparams/gld960.sh
new file mode 100644
index 00000000..1e039654
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/gld960coff.sh b/binutils-2.17/ld/emulparams/gld960coff.sh
new file mode 100644
index 00000000..65b0dcab
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8300.sh b/binutils-2.17/ld/emulparams/h8300.sh
new file mode 100644
index 00000000..68ecdb3b
--- /dev/null
+++ b/binutils-2.17/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)
+ _tinydata = .;
+ }"
+TINY_BSS_SECTION=".tinybss : AT (_tinydata)
+ {
+ *(.tinybss)
+ }"
diff --git a/binutils-2.17/ld/emulparams/h8300elf.sh b/binutils-2.17/ld/emulparams/h8300elf.sh
new file mode 100644
index 00000000..67d5b203
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/h8300elf.sh
@@ -0,0 +1,25 @@
+# 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"
+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 0xff8000 :
+ {
+ *(.tinydata)
+ _tinydata = .;
+ }"
+TINY_BSS_SECTION=".tinybss : AT (_tinydata)
+ {
+ *(.tinybss)
+ }"
diff --git a/binutils-2.17/ld/emulparams/h8300h.sh b/binutils-2.17/ld/emulparams/h8300h.sh
new file mode 100644
index 00000000..3ab794e1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8300helf.sh b/binutils-2.17/ld/emulparams/h8300helf.sh
new file mode 100644
index 00000000..1cde35cf
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/h8300helf.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300h"
+STACK_ADDR=0x2fefc
diff --git a/binutils-2.17/ld/emulparams/h8300hn.sh b/binutils-2.17/ld/emulparams/h8300hn.sh
new file mode 100644
index 00000000..d3490823
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8300hnelf.sh b/binutils-2.17/ld/emulparams/h8300hnelf.sh
new file mode 100644
index 00000000..4a75ff9f
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/h8300hnelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300hn"
diff --git a/binutils-2.17/ld/emulparams/h8300s.sh b/binutils-2.17/ld/emulparams/h8300s.sh
new file mode 100644
index 00000000..e27b4f52
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8300self.sh b/binutils-2.17/ld/emulparams/h8300self.sh
new file mode 100644
index 00000000..7539eecf
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/h8300self.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300s"
+STACK_ADDR=0x2fefc
diff --git a/binutils-2.17/ld/emulparams/h8300sn.sh b/binutils-2.17/ld/emulparams/h8300sn.sh
new file mode 100644
index 00000000..16364efa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8300snelf.sh b/binutils-2.17/ld/emulparams/h8300snelf.sh
new file mode 100644
index 00000000..ddeec116
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/h8300snelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300sn"
diff --git a/binutils-2.17/ld/emulparams/h8300sx.sh b/binutils-2.17/ld/emulparams/h8300sx.sh
new file mode 100644
index 00000000..b46b6f97
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8300sxelf.sh b/binutils-2.17/ld/emulparams/h8300sxelf.sh
new file mode 100644
index 00000000..bac2cc3c
--- /dev/null
+++ b/binutils-2.17/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)
+ _tinydata = .;
+ }"
+TINY_BSS_SECTION=".tinybss : AT (_tinydata)
+ {
+ *(.tinybss)
+ }"
diff --git a/binutils-2.17/ld/emulparams/h8300sxn.sh b/binutils-2.17/ld/emulparams/h8300sxn.sh
new file mode 100644
index 00000000..7cad9746
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8300sxnelf.sh b/binutils-2.17/ld/emulparams/h8300sxnelf.sh
new file mode 100644
index 00000000..98e9d497
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/h8300sxnelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/h8300elf.sh
+ARCH="h8300:h8300sxn"
diff --git a/binutils-2.17/ld/emulparams/h8500.sh b/binutils-2.17/ld/emulparams/h8500.sh
new file mode 100644
index 00000000..6f4ca802
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8500b.sh b/binutils-2.17/ld/emulparams/h8500b.sh
new file mode 100644
index 00000000..d2d3fee2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8500c.sh b/binutils-2.17/ld/emulparams/h8500c.sh
new file mode 100644
index 00000000..240a0657
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8500m.sh b/binutils-2.17/ld/emulparams/h8500m.sh
new file mode 100644
index 00000000..cd9f7b66
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/h8500s.sh b/binutils-2.17/ld/emulparams/h8500s.sh
new file mode 100644
index 00000000..b9e294aa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/hp300bsd.sh b/binutils-2.17/ld/emulparams/hp300bsd.sh
new file mode 100644
index 00000000..8f5c50b3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/hp3hpux.sh b/binutils-2.17/ld/emulparams/hp3hpux.sh
new file mode 100644
index 00000000..b7badd8b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/hppa64linux.sh b/binutils-2.17/ld/emulparams/hppa64linux.sh
new file mode 100644
index 00000000..aaf8c725
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/hppa64linux.sh
@@ -0,0 +1,55 @@
+# If you change this file, please also look at files which source this one:
+# elf64hppa.sh
+
+SCRIPT_NAME=elf
+ELFSIZE=64
+# FIXME: this output format is for hpux.
+OUTPUT_FORMAT="elf64-hppa-linux"
+TEXT_START_ADDR=0x10000
+TARGET_PAGE_SIZE=0x10000
+MAXPAGESIZE=0x10000
+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.
+LARGE_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.17/ld/emulparams/hppaelf.sh b/binutils-2.17/ld/emulparams/hppaelf.sh
new file mode 100644
index 00000000..77dcb397
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/hppalinux.sh b/binutils-2.17/ld/emulparams/hppalinux.sh
new file mode 100644
index 00000000..89a253f2
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/hppalinux.sh
@@ -0,0 +1,22 @@
+# 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"
+TEXT_START_ADDR=0x10000
+TARGET_PAGE_SIZE=0x10000
+MAXPAGESIZE=0x10000
+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.17/ld/emulparams/hppanbsd.sh b/binutils-2.17/ld/emulparams/hppanbsd.sh
new file mode 100644
index 00000000..dcc6a932
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/hppaobsd.sh b/binutils-2.17/ld/emulparams/hppaobsd.sh
new file mode 100644
index 00000000..0227dc5c
--- /dev/null
+++ b/binutils-2.17/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=0x1000
diff --git a/binutils-2.17/ld/emulparams/i386aout.sh b/binutils-2.17/ld/emulparams/i386aout.sh
new file mode 100644
index 00000000..dc9e5546
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386aout.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-i386"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0
+NONPAGED_TEXT_START_ADDR=0x1000
+ARCH=i386
diff --git a/binutils-2.17/ld/emulparams/i386beos.sh b/binutils-2.17/ld/emulparams/i386beos.sh
new file mode 100755
index 00000000..869da5f4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/i386bsd.sh b/binutils-2.17/ld/emulparams/i386bsd.sh
new file mode 100644
index 00000000..e0c0e2fa
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386bsd.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-i386-bsd"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0
+NONPAGED_TEXT_START_ADDR=0x1000
+ARCH=i386
diff --git a/binutils-2.17/ld/emulparams/i386coff.sh b/binutils-2.17/ld/emulparams/i386coff.sh
new file mode 100644
index 00000000..3417b7d3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/i386go32.sh b/binutils-2.17/ld/emulparams/i386go32.sh
new file mode 100644
index 00000000..0ef16c4d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386go32.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=i386go32
+OUTPUT_FORMAT="coff-go32"
+TEXT_START_ADDR=0x10a8
+TARGET_PAGE_SIZE=0x1000
+SEGMENT_SIZE=0x200
+NONPAGED_TEXT_START_ADDR=0x0
+ARCH=i386
+
diff --git a/binutils-2.17/ld/emulparams/i386linux.sh b/binutils-2.17/ld/emulparams/i386linux.sh
new file mode 100644
index 00000000..a416422d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386linux.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-i386-linux"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0x1020
+NONPAGED_TEXT_START_ADDR=0
+ARCH=i386
+TEMPLATE_NAME=linux
diff --git a/binutils-2.17/ld/emulparams/i386lynx.sh b/binutils-2.17/ld/emulparams/i386lynx.sh
new file mode 100644
index 00000000..3235ebea
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386lynx.sh
@@ -0,0 +1,17 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+ENTRY=_main
+TEXT_BASE=0x0
+DYN_TEXT_BASE=0x00400000
+TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})"
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x1000
+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.17/ld/emulparams/i386mach.sh b/binutils-2.17/ld/emulparams/i386mach.sh
new file mode 100644
index 00000000..b7cb2764
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386mach.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-mach3"
+TEXT_START_ADDR=0x10020
+NONPAGED_TEXT_START_ADDR=0x10000
+SEGMENT_SIZE=0x1000
+PAD_TEXT=t
+ARCH=i386
diff --git a/binutils-2.17/ld/emulparams/i386moss.sh b/binutils-2.17/ld/emulparams/i386moss.sh
new file mode 100644
index 00000000..eece4473
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386moss.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+TEXT_START_ADDR=0x00002000
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x00002000
+ARCH=i386
+MACHINE=
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/binutils-2.17/ld/emulparams/i386msdos.sh b/binutils-2.17/ld/emulparams/i386msdos.sh
new file mode 100644
index 00000000..9311fa1f
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386msdos.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=i386msdos
+OUTPUT_FORMAT="msdos"
+TEXT_START_ADDR=0x0
+NONPAGED_TEXT_START_ADDR=0x0
+SEGMENT_SIZE=0x10
+PAD_TEXT=t
+ARCH=i386
diff --git a/binutils-2.17/ld/emulparams/i386nbsd.sh b/binutils-2.17/ld/emulparams/i386nbsd.sh
new file mode 100644
index 00000000..a9e6a383
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/i386nto.sh b/binutils-2.17/ld/emulparams/i386nto.sh
new file mode 100644
index 00000000..e4872ede
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386nto.sh
@@ -0,0 +1,12 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-i386"
+TEXT_START_ADDR=0x08048000
+TEXT_START_SYMBOLS='_btext = .;'
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x08048000
+#SHLIB_TEXT_START_ADDR=0xb0300000
+ARCH=i386
+MACHINE=
+NOP=0x9090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/binutils-2.17/ld/emulparams/i386nw.sh b/binutils-2.17/ld/emulparams/i386nw.sh
new file mode 100644
index 00000000..621b4755
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/i386nw.sh
@@ -0,0 +1,9 @@
+SCRIPT_NAME=nw
+OUTPUT_FORMAT="elf32-i386"
+TEXT_START_ADDR=0x08000000
+MAXPAGESIZE=0x1000
+NONPAGED_TEXT_START_ADDR=0x08000000
+ARCH=i386
+NOP=0x90909090
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/binutils-2.17/ld/emulparams/i386pe.sh b/binutils-2.17/ld/emulparams/i386pe.sh
new file mode 100644
index 00000000..879379f9
--- /dev/null
+++ b/binutils-2.17/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
+ENTRY="_mainCRTStartup"
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.17/ld/emulparams/i386pe_posix.sh b/binutils-2.17/ld/emulparams/i386pe_posix.sh
new file mode 100644
index 00000000..afa00de0
--- /dev/null
+++ b/binutils-2.17/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
+ENTRY="___PosixProcessStartup"
+SUBSYSTEM=7
+EXECUTABLE_NAME=a.out
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.17/ld/emulparams/lnk960.sh b/binutils-2.17/ld/emulparams/lnk960.sh
new file mode 100644
index 00000000..4a650f75
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/m32relf.sh b/binutils-2.17/ld/emulparams/m32relf.sh
new file mode 100644
index 00000000..947c7a8e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/m32relf_linux.sh b/binutils-2.17/ld/emulparams/m32relf_linux.sh
new file mode 100644
index 00000000..be2ad232
--- /dev/null
+++ b/binutils-2.17/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=0x1000
+
+# 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.17/ld/emulparams/m32rlelf.sh b/binutils-2.17/ld/emulparams/m32rlelf.sh
new file mode 100644
index 00000000..2d4488b5
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/m32rlelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/m32relf.sh
+OUTPUT_FORMAT="elf32-m32rle"
diff --git a/binutils-2.17/ld/emulparams/m32rlelf_linux.sh b/binutils-2.17/ld/emulparams/m32rlelf_linux.sh
new file mode 100644
index 00000000..6d16a1cc
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/m32rlelf_linux.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/m32relf_linux.sh
+OUTPUT_FORMAT="elf32-m32rle-linux"
diff --git a/binutils-2.17/ld/emulparams/m68hc11elf.sh b/binutils-2.17/ld/emulparams/m68hc11elf.sh
new file mode 100644
index 00000000..1caa6e19
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/m68hc11elfb.sh b/binutils-2.17/ld/emulparams/m68hc11elfb.sh
new file mode 100644
index 00000000..a8f01d24
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/m68hc12elf.sh b/binutils-2.17/ld/emulparams/m68hc12elf.sh
new file mode 100644
index 00000000..c4d74871
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/m68hc12elfb.sh b/binutils-2.17/ld/emulparams/m68hc12elfb.sh
new file mode 100644
index 00000000..acc3ce34
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/m68k4knbsd.sh b/binutils-2.17/ld/emulparams/m68k4knbsd.sh
new file mode 100644
index 00000000..1bc24c0e
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/m68k4knbsd.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+NONPAGED_TEXT_START_ADDR=0x1000
+OUTPUT_FORMAT="a.out-m68k4k-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=m68k
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
diff --git a/binutils-2.17/ld/emulparams/m68kaout.sh b/binutils-2.17/ld/emulparams/m68kaout.sh
new file mode 100644
index 00000000..9bfaaf71
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/m68kaout.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-zero-big"
+TEXT_START_ADDR=0x2020
+TARGET_PAGE_SIZE=0x2000
+SEGMENT_SIZE=0x20000
+NONPAGED_TEXT_START_ADDR=0x2000
+ARCH=m68k
diff --git a/binutils-2.17/ld/emulparams/m68kaux.sh b/binutils-2.17/ld/emulparams/m68kaux.sh
new file mode 100644
index 00000000..19e86cc6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/m68kcoff.sh b/binutils-2.17/ld/emulparams/m68kcoff.sh
new file mode 100644
index 00000000..bd884c9f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/m68kelf.sh b/binutils-2.17/ld/emulparams/m68kelf.sh
new file mode 100644
index 00000000..b784a3ca
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/m68kelf.sh
@@ -0,0 +1,12 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-m68k"
+TEXT_START_ADDR=0x80000000
+MAXPAGESIZE=0x2000
+NONPAGED_TEXT_START_ADDR=${TEXT_START_ADDR}
+ARCH=m68k
+MACHINE=
+NOP=0x4e754e75
+TEMPLATE_NAME=elf32
+EXTRA_EM_FILE=m68kelf
+GENERATE_SHLIB_SCRIPT=yes
+NO_SMALL_DATA=yes
diff --git a/binutils-2.17/ld/emulparams/m68kelfnbsd.sh b/binutils-2.17/ld/emulparams/m68kelfnbsd.sh
new file mode 100644
index 00000000..69e328dd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/m68klinux.sh b/binutils-2.17/ld/emulparams/m68klinux.sh
new file mode 100644
index 00000000..56c3dad9
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/m68klinux.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-m68k-linux"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0x1020
+NONPAGED_TEXT_START_ADDR=0
+ARCH=m68k
+TEMPLATE_NAME=linux
diff --git a/binutils-2.17/ld/emulparams/m68knbsd.sh b/binutils-2.17/ld/emulparams/m68knbsd.sh
new file mode 100644
index 00000000..a742807d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/m68knbsd.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x2020
+NONPAGED_TEXT_START_ADDR=0x2000
+OUTPUT_FORMAT="a.out-m68k-netbsd"
+TARGET_PAGE_SIZE=0x2000
+ARCH=m68k
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
diff --git a/binutils-2.17/ld/emulparams/m68kpsos.sh b/binutils-2.17/ld/emulparams/m68kpsos.sh
new file mode 100644
index 00000000..34eb8ca5
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/m68kpsos.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=psos
+OUTPUT_FORMAT="elf32-m68k"
+TEXT_START_ADDR=0x20000
+MAXPAGESIZE=0x1000
+ARCH=m68k
+TEMPLATE_NAME=elf32
diff --git a/binutils-2.17/ld/emulparams/m88kbcs.sh b/binutils-2.17/ld/emulparams/m88kbcs.sh
new file mode 100644
index 00000000..d48a1eba
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/maxqcoff.sh b/binutils-2.17/ld/emulparams/maxqcoff.sh
new file mode 100644
index 00000000..d07533ba
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/maxqcoff.sh
@@ -0,0 +1,7 @@
+OUTPUT_FORMAT="coff-maxq"
+
+SCRIPT_NAME=maxqcoff
+
+ARCH=MAXQ
+
+TEXT_START_ADDR=0x8000
diff --git a/binutils-2.17/ld/emulparams/mcorepe.sh b/binutils-2.17/ld/emulparams/mcorepe.sh
new file mode 100644
index 00000000..8326c2e5
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/mcorepe.sh
@@ -0,0 +1,10 @@
+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
+ENTRY="_mainCRTStartup"
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.17/ld/emulparams/mipsbig.sh b/binutils-2.17/ld/emulparams/mipsbig.sh
new file mode 100644
index 00000000..9fe29538
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/mipsbsd.sh b/binutils-2.17/ld/emulparams/mipsbsd.sh
new file mode 100644
index 00000000..e8fb35be
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/mipsidt.sh b/binutils-2.17/ld/emulparams/mipsidt.sh
new file mode 100644
index 00000000..f3812676
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/mipsidtl.sh b/binutils-2.17/ld/emulparams/mipsidtl.sh
new file mode 100644
index 00000000..52447ff0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/mipslit.sh b/binutils-2.17/ld/emulparams/mipslit.sh
new file mode 100644
index 00000000..acb23446
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/mipslnews.sh b/binutils-2.17/ld/emulparams/mipslnews.sh
new file mode 100644
index 00000000..d0bb91c1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/mipspe.sh b/binutils-2.17/ld/emulparams/mipspe.sh
new file mode 100644
index 00000000..a5cfc2ef
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/mipspe.sh
@@ -0,0 +1,10 @@
+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=\"_\"
+ENTRY="_mainCRTStartup"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.17/ld/emulparams/mmo.sh b/binutils-2.17/ld/emulparams/mmo.sh
new file mode 100644
index 00000000..e0a87981
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/mmo.sh
@@ -0,0 +1,10 @@
+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
+ARCH=mmix
+COMPILE_IN=yes
+EXTRA_EM_FILE=mmo
diff --git a/binutils-2.17/ld/emulparams/mn10200.sh b/binutils-2.17/ld/emulparams/mn10200.sh
new file mode 100644
index 00000000..f96224b0
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/mn10200.sh
@@ -0,0 +1,21 @@
+# If you change this file, please also look at files which source this one:
+# mn10300.sh
+
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-mn10200"
+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.17/ld/emulparams/mn10300.sh b/binutils-2.17/ld/emulparams/mn10300.sh
new file mode 100644
index 00000000..23bbda44
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/mn10300.sh
@@ -0,0 +1,5 @@
+. ${srcdir}/emulparams/mn10200.sh
+OUTPUT_FORMAT="elf32-mn10300"
+ARCH=mn10300
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
diff --git a/binutils-2.17/ld/emulparams/msp430all.sh b/binutils-2.17/ld/emulparams/msp430all.sh
new file mode 100644
index 00000000..baee02ee
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/msp430all.sh
@@ -0,0 +1,1008 @@
+#!/bin/sh
+
+# This called by genscripts_extra.sh
+
+MSP430_NAME=${EMULATION_NAME}
+
+if [ "${MSP430_NAME}" = "msp430x110" ] ; then
+ARCH=msp:11
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xfc00
+ROM_SIZE=0x3e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1101" ] ; then
+ARCH=msp:110
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xfc00
+ROM_SIZE=0x3e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1111" ] ; then
+ARCH=msp:110
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf800
+ROM_SIZE=0x07e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x112" ] ; then
+ARCH=msp:11
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0xfe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1121" ] ; then
+ARCH=msp:110
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1122" ] ; then
+ARCH=msp:110
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1132" ] ; then
+ARCH=msp:110
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x122" ] ; then
+ARCH=msp:12
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0xfe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1222" ] ; then
+ARCH=msp:12
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0xfe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x123" ] ; then
+ARCH=msp:12
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1232" ] ; then
+ARCH=msp:12
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x133" ] ; then
+ARCH=msp:13
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1331" ] ; then
+ARCH=msp:13
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x135" ] ; then
+ARCH=msp:13
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1351" ] ; then
+ARCH=msp:13
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x147" ] ; then
+ARCH=msp:14
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x148" ] ; then
+ARCH=msp:14
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x4000
+ROM_SIZE=0xbfe0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x149" ] ; then
+ARCH=msp:14
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x155" ] ; then
+ARCH=msp:15
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x156" ] ; then
+ARCH=msp:15
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xa000
+ROM_SIZE=0x5fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x157" ] ; then
+ARCH=msp:15
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x167" ] ; then
+ARCH=msp:16
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1K
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x168" ] ; then
+ARCH=msp:16
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x4000
+ROM_SIZE=0xbfe0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x169" ] ; then
+ARCH=msp:16
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1610" ] ; then
+ARCH=msp:16
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x1100
+RAM_SIZE=0x1400
+
+STACK=0x2500
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1611" ] ; then
+ARCH=msp:16
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x4000
+ROM_SIZE=0xbfe0
+RAM_START=0x1100
+RAM_SIZE=0x2800
+
+STACK=0x3900
+fi
+
+if [ "${MSP430_NAME}" = "msp430x1612" ] ; then
+ARCH=msp:16
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x2500
+ROM_SIZE=0xdae0
+RAM_START=0x1100
+RAM_SIZE=0x1400
+
+STACK=0x2500
+fi
+
+if [ "${MSP430_NAME}" = "msp430x2101" ] ; then
+ARCH=msp:21
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xFC00
+ROM_SIZE=0x03e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x2111" ] ; then
+ARCH=msp:21
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xF800
+ROM_SIZE=0x07e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x2121" ] ; then
+ARCH=msp:21
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x2131" ] ; then
+ARCH=msp:21
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x311" ] ; then
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430_3
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf800
+ROM_SIZE=0x07e0
+RAM_START=0x0200
+RAM_SIZE=128
+
+STACK=0x280
+fi
+
+if [ "${MSP430_NAME}" = "msp430x312" ] ; then
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430_3
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x313" ] ; then
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430_3
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x314" ] ; then
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430_3
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xd000
+ROM_SIZE=0x2fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x315" ] ; then
+ARCH=msp:31
+MACHINE=
+SCRIPT_NAME=elf32msp430_3
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x323" ] ; then
+ARCH=msp:32
+MACHINE=
+SCRIPT_NAME=elf32msp430_3
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x325" ] ; then
+ARCH=msp:32
+MACHINE=
+SCRIPT_NAME=elf32msp430_3
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x336" ] ; then
+ARCH=msp:33
+MACHINE=
+SCRIPT_NAME=elf32msp430_3
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xa000
+ROM_SIZE=0x5fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x337" ] ; then
+ARCH=msp:33
+MACHINE=
+SCRIPT_NAME=elf32msp430_3
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x412" ] ; then
+ARCH=msp:41
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xf000
+ROM_SIZE=0x0fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x413" ] ; then
+ARCH=msp:41
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430x415" ] ; then
+ARCH=msp:41
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x417" ] ; then
+ARCH=msp:41
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x435" ] ; then
+ARCH=msp:43
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430x436" ] ; then
+ARCH=msp:43
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xa000
+ROM_SIZE=0x5fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x437" ] ; then
+ARCH=msp:43
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x447" ] ; then
+ARCH=msp:44
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430x448" ] ; then
+ARCH=msp:44
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x4000
+ROM_SIZE=0xbfe0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430x449" ] ; then
+ARCH=msp:44
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430xE423" ] ; then
+ARCH=msp:42
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430xE425" ] ; then
+ARCH=msp:42
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430xE427" ] ; then
+ARCH=msp:42
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430xG437" ] ; then
+ARCH=msp:43
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=1024
+
+STACK=0x600
+fi
+
+if [ "${MSP430_NAME}" = "msp430xG438" ] ; then
+ARCH=msp:43
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x4000
+ROM_SIZE=0xbef0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430xG439" ] ; then
+ARCH=msp:43
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x1100
+ROM_SIZE=0xeee0
+RAM_START=0x0200
+RAM_SIZE=0x0800
+
+STACK=0xa00
+fi
+
+if [ "${MSP430_NAME}" = "msp430xW423" ] ; then
+ARCH=msp:42
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xe000
+ROM_SIZE=0x1fe0
+RAM_START=0x0200
+RAM_SIZE=256
+
+STACK=0x300
+fi
+
+if [ "${MSP430_NAME}" = "msp430xW425" ] ; then
+ARCH=msp:42
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0xc000
+ROM_SIZE=0x3fe0
+RAM_START=0x0200
+RAM_SIZE=512
+
+STACK=0x400
+fi
+
+if [ "${MSP430_NAME}" = "msp430xW427" ] ; then
+ARCH=msp:42
+MACHINE=
+SCRIPT_NAME=elf32msp430
+OUTPUT_FORMAT="elf32-msp430"
+MAXPAGESIZE=1
+EMBEDDED=yes
+TEMPLATE_NAME=generic
+
+ROM_START=0x8000
+ROM_SIZE=0x7fe0
+RAM_START=0x0200
+RAM_SIZE=0x400
+
+STACK=0x600
+fi
diff --git a/binutils-2.17/ld/emulparams/news.sh b/binutils-2.17/ld/emulparams/news.sh
new file mode 100644
index 00000000..310ddf92
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/ns32knbsd.sh b/binutils-2.17/ld/emulparams/ns32knbsd.sh
new file mode 100644
index 00000000..2ded3014
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/ns32knbsd.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+OUTPUT_FORMAT="a.out-ns32k-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=ns32k
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
+NONPAGED_TEXT_START_ADDR=0x1000
+EXTRA_EM_FILE=netbsd
diff --git a/binutils-2.17/ld/emulparams/or32.sh b/binutils-2.17/ld/emulparams/or32.sh
new file mode 100644
index 00000000..0717eb7e
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/or32.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=or32
+OUTPUT_FORMAT="coff-or32-big"
+# OUTPUT_FORMAT="elf32-or32"
+TEXT_START_ADDR=0x1000000
+TARGET_PAGE_SIZE=0x1000000
+ARCH=or32
diff --git a/binutils-2.17/ld/emulparams/or32elf.sh b/binutils-2.17/ld/emulparams/or32elf.sh
new file mode 100644
index 00000000..04d16303
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/or32elf.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-or32"
+TEXT_START_ADDR=0x1000000
+TARGET_PAGE_SIZE=0x1000000
+MAXPAGESIZE=0x1000
+ARCH=or32
diff --git a/binutils-2.17/ld/emulparams/pc532macha.sh b/binutils-2.17/ld/emulparams/pc532macha.sh
new file mode 100644
index 00000000..9c1d0791
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/pc532macha.sh
@@ -0,0 +1,6 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-pc532-mach"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR="0x10020"
+NONPAGED_TEXT_START_ADDR=0x10000
+ARCH=ns32k
diff --git a/binutils-2.17/ld/emulparams/pdp11.sh b/binutils-2.17/ld/emulparams/pdp11.sh
new file mode 100644
index 00000000..aaf955af
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/pjelf.sh b/binutils-2.17/ld/emulparams/pjelf.sh
new file mode 100644
index 00000000..acfd2b34
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/pjelf.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-pj"
+TEXT_START_ADDR=0x1000000
+MAXPAGESIZE=0x1000
+ARCH=pj
diff --git a/binutils-2.17/ld/emulparams/pjlelf.sh b/binutils-2.17/ld/emulparams/pjlelf.sh
new file mode 100644
index 00000000..35958fde
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/pjlelf.sh
@@ -0,0 +1,5 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-pjl"
+TEXT_START_ADDR=0x1000000
+MAXPAGESIZE=0x1000
+ARCH=pj
diff --git a/binutils-2.17/ld/emulparams/ppclynx.sh b/binutils-2.17/ld/emulparams/ppclynx.sh
new file mode 100644
index 00000000..25346871
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/ppclynx.sh
@@ -0,0 +1,20 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-powerpc"
+TEXT_BASE=0x00002000
+DYN_TEXT_BASE=0x00400000
+TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})"
+MAXPAGESIZE=0x10000
+NONPAGED_TEXT_START_ADDR=0x1000
+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.17/ld/emulparams/ppcmacos.sh b/binutils-2.17/ld/emulparams/ppcmacos.sh
new file mode 100644
index 00000000..9f02af40
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/ppcnw.sh b/binutils-2.17/ld/emulparams/ppcnw.sh
new file mode 100644
index 00000000..c3ead436
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/ppcnw.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=nw
+OUTPUT_FORMAT="elf32-powerpc"
+TEXT_START_ADDR=0x0400000
+DATA_ADDR=0x10000000
+MAXPAGESIZE=0x40000
+NONPAGED_TEXT_START_ADDR=0x0400000
+ARCH=powerpc
diff --git a/binutils-2.17/ld/emulparams/ppcpe.sh b/binutils-2.17/ld/emulparams/ppcpe.sh
new file mode 100644
index 00000000..2e1e1020
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/ppcpe.sh
@@ -0,0 +1,8 @@
+ARCH=powerpc
+SCRIPT_NAME=ppcpe
+OUTPUT_FORMAT="pei-powerpcle"
+TEMPLATE_NAME=pe
+ENTRY="_mainCRTStartup"
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.17/ld/emulparams/riscix.sh b/binutils-2.17/ld/emulparams/riscix.sh
new file mode 100644
index 00000000..e7f6d92f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/sh.sh b/binutils-2.17/ld/emulparams/sh.sh
new file mode 100644
index 00000000..52d14435
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/shelf.sh b/binutils-2.17/ld/emulparams/shelf.sh
new file mode 100644
index 00000000..6f66bf5e
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shelf.sh
@@ -0,0 +1,33 @@
+# 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"
+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.17/ld/emulparams/shelf32.sh b/binutils-2.17/ld/emulparams/shelf32.sh
new file mode 100644
index 00000000..6582b028
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shelf32.sh
@@ -0,0 +1,58 @@
+# 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"}
+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) + 0x40000)} :
+ {
+ ${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.17/ld/emulparams/shelf32_linux.sh b/binutils-2.17/ld/emulparams/shelf32_linux.sh
new file mode 100644
index 00000000..a51e22fb
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shelf32_linux.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/shlelf32_linux.sh
+OUTPUT_FORMAT="elf32-sh64big-linux"
diff --git a/binutils-2.17/ld/emulparams/shelf32_nbsd.sh b/binutils-2.17/ld/emulparams/shelf32_nbsd.sh
new file mode 100644
index 00000000..14965ef9
--- /dev/null
+++ b/binutils-2.17/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=0x10000
+
+ENTRY=__start
+
+unset EMBEDDED
+unset STACK_ADDR
+unset OTHER_SECTIONS
+OTHER_SECTIONS="
+ .cranges 0 : { *(.cranges) }
+"
diff --git a/binutils-2.17/ld/emulparams/shelf64.sh b/binutils-2.17/ld/emulparams/shelf64.sh
new file mode 100644
index 00000000..eb1f6c76
--- /dev/null
+++ b/binutils-2.17/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) + 0x40000)} :
+ {
+ ${RELOCATING+_stack = .;}
+ *(.stack)
+ LONG(0xdeaddead)
+ }
+"
+# We do not need .stack for shared library.
+test -n "$CREATE_SHLIB" && OTHER_SECTIONS=""
diff --git a/binutils-2.17/ld/emulparams/shelf64_nbsd.sh b/binutils-2.17/ld/emulparams/shelf64_nbsd.sh
new file mode 100644
index 00000000..7a3ff21d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/shelf_linux.sh b/binutils-2.17/ld/emulparams/shelf_linux.sh
new file mode 100644
index 00000000..b841beff
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shelf_linux.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/shlelf_linux.sh
+OUTPUT_FORMAT="elf32-shbig-linux"
diff --git a/binutils-2.17/ld/emulparams/shelf_nbsd.sh b/binutils-2.17/ld/emulparams/shelf_nbsd.sh
new file mode 100644
index 00000000..3fcd4925
--- /dev/null
+++ b/binutils-2.17/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=0x10000
+
+DATA_START_SYMBOLS='__data_start = . ;';
+
+ENTRY=_start
+
+unset EMBEDDED
+unset OTHER_SECTIONS
diff --git a/binutils-2.17/ld/emulparams/shelf_nto.sh b/binutils-2.17/ld/emulparams/shelf_nto.sh
new file mode 100644
index 00000000..f2252fb8
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shelf_nto.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-sh"
+TEXT_START_ADDR=0x08040000
+MAXPAGESIZE=0x1000
+ARCH=sh
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+TEXT_START_SYMBOLS='_btext = .;'
+ENTRY=_start
diff --git a/binutils-2.17/ld/emulparams/shl.sh b/binutils-2.17/ld/emulparams/shl.sh
new file mode 100644
index 00000000..5fbb165c
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shl.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/sh.sh
+OUTPUT_FORMAT="coff-shl"
diff --git a/binutils-2.17/ld/emulparams/shlelf.sh b/binutils-2.17/ld/emulparams/shlelf.sh
new file mode 100644
index 00000000..e19678bc
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shlelf.sh
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/shelf.sh
+OUTPUT_FORMAT="elf32-shl"
diff --git a/binutils-2.17/ld/emulparams/shlelf32.sh b/binutils-2.17/ld/emulparams/shlelf32.sh
new file mode 100644
index 00000000..68c85dd9
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shlelf32.sh
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT="elf32-sh64l"
+. ${srcdir}/emulparams/shelf32.sh
diff --git a/binutils-2.17/ld/emulparams/shlelf32_linux.sh b/binutils-2.17/ld/emulparams/shlelf32_linux.sh
new file mode 100644
index 00000000..59d4179d
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shlelf32_linux.sh
@@ -0,0 +1,43 @@
+# 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"
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE=0x10000
+COMMONPAGESIZE=0x1000
+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.17/ld/emulparams/shlelf32_nbsd.sh b/binutils-2.17/ld/emulparams/shlelf32_nbsd.sh
new file mode 100644
index 00000000..c4abe6be
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shlelf32_nbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/shelf32_nbsd.sh
+
+OUTPUT_FORMAT="elf32-sh64l-nbsd"
diff --git a/binutils-2.17/ld/emulparams/shlelf64.sh b/binutils-2.17/ld/emulparams/shlelf64.sh
new file mode 100644
index 00000000..874b00c0
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shlelf64.sh
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT="elf64-sh64l"
+. ${srcdir}/emulparams/shelf64.sh
diff --git a/binutils-2.17/ld/emulparams/shlelf64_nbsd.sh b/binutils-2.17/ld/emulparams/shlelf64_nbsd.sh
new file mode 100644
index 00000000..5b693c35
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shlelf64_nbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/shelf64_nbsd.sh
+
+OUTPUT_FORMAT="elf64-sh64l-nbsd"
diff --git a/binutils-2.17/ld/emulparams/shlelf_linux.sh b/binutils-2.17/ld/emulparams/shlelf_linux.sh
new file mode 100644
index 00000000..528b7257
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shlelf_linux.sh
@@ -0,0 +1,18 @@
+# If you change this file, please also look at files which source this one:
+# shelf_linux.sh
+
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-sh-linux"
+TEXT_START_ADDR=0x400000
+MAXPAGESIZE=0x10000
+COMMONPAGESIZE=0x1000
+ARCH=sh
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+GENERATE_PIE_SCRIPT=yes
+
+DATA_START_SYMBOLS='__data_start = . ;';
+
+OTHER_READWRITE_SECTIONS="
+ .note.ABI-tag ${RELOCATING-0} : { *(.note.ABI-tag) }"
diff --git a/binutils-2.17/ld/emulparams/shlelf_nbsd.sh b/binutils-2.17/ld/emulparams/shlelf_nbsd.sh
new file mode 100644
index 00000000..d6ca82e3
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shlelf_nbsd.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/shelf_nbsd.sh
+
+OUTPUT_FORMAT="elf32-shl-nbsd"
diff --git a/binutils-2.17/ld/emulparams/shlelf_nto.sh b/binutils-2.17/ld/emulparams/shlelf_nto.sh
new file mode 100644
index 00000000..d23e69a6
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shlelf_nto.sh
@@ -0,0 +1,10 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-shl"
+TEXT_START_ADDR=0x08040000
+MAXPAGESIZE=0x1000
+ARCH=sh
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+TEXT_START_SYMBOLS='_btext = .;'
+ENTRY=_start
diff --git a/binutils-2.17/ld/emulparams/shlsymbian.sh b/binutils-2.17/ld/emulparams/shlsymbian.sh
new file mode 100644
index 00000000..9c6dfba7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/shpe.sh b/binutils-2.17/ld/emulparams/shpe.sh
new file mode 100644
index 00000000..d50861f5
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/shpe.sh
@@ -0,0 +1,10 @@
+ARCH=sh
+SCRIPT_NAME=pe
+OUTPUT_FORMAT="pei-shl"
+TEMPLATE_NAME=pe
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+ENTRY="_mainCRTStartup"
+SUBSYSTEM=PE_DEF_SUBSYSTEM
+INITIAL_SYMBOL_CHAR=\"_\"
+TARGET_PAGE_SIZE=0x1000
diff --git a/binutils-2.17/ld/emulparams/sparcaout.sh b/binutils-2.17/ld/emulparams/sparcaout.sh
new file mode 100644
index 00000000..429b925c
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/sparcaout.sh
@@ -0,0 +1,8 @@
+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
+TARGET_PAGE_SIZE=0x2000
+NONPAGED_TEXT_START_ADDR=0x2000
+ARCH=sparc
diff --git a/binutils-2.17/ld/emulparams/sparclinux.sh b/binutils-2.17/ld/emulparams/sparclinux.sh
new file mode 100644
index 00000000..7ccb0bec
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/sparclinux.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-sparc-linux"
+TARGET_PAGE_SIZE=0x1000
+TEXT_START_ADDR=0x1020
+NONPAGED_TEXT_START_ADDR=0
+ARCH=sparc
+TEMPLATE_NAME=linux
diff --git a/binutils-2.17/ld/emulparams/sparcnbsd.sh b/binutils-2.17/ld/emulparams/sparcnbsd.sh
new file mode 100644
index 00000000..f27daf3c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/st2000.sh b/binutils-2.17/ld/emulparams/st2000.sh
new file mode 100644
index 00000000..04988328
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/sun3.sh b/binutils-2.17/ld/emulparams/sun3.sh
new file mode 100644
index 00000000..db0f71f3
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/sun3.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-sunos-big"
+TEXT_START_ADDR=0x2020
+TARGET_PAGE_SIZE=0x2000
+SEGMENT_SIZE=0x20000
+NONPAGED_TEXT_START_ADDR=0x2000
+ARCH=m68k
+TEMPLATE_NAME=sunos
diff --git a/binutils-2.17/ld/emulparams/sun4.sh b/binutils-2.17/ld/emulparams/sun4.sh
new file mode 100644
index 00000000..bd427753
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/sun4.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-sunos-big"
+TEXT_START_ADDR=0x2020
+TARGET_PAGE_SIZE=0x2000
+NONPAGED_TEXT_START_ADDR=0x2000
+ALIGNMENT=8
+ARCH=sparc
+TEMPLATE_NAME=sunos
diff --git a/binutils-2.17/ld/emulparams/tic30aout.sh b/binutils-2.17/ld/emulparams/tic30aout.sh
new file mode 100644
index 00000000..2a4c13f5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/tic30coff.sh b/binutils-2.17/ld/emulparams/tic30coff.sh
new file mode 100644
index 00000000..df779437
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/tic3xcoff.sh b/binutils-2.17/ld/emulparams/tic3xcoff.sh
new file mode 100644
index 00000000..be543bf9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/tic3xcoff_onchip.sh b/binutils-2.17/ld/emulparams/tic3xcoff_onchip.sh
new file mode 100644
index 00000000..1c1f8b1e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/tic4xcoff.sh b/binutils-2.17/ld/emulparams/tic4xcoff.sh
new file mode 100644
index 00000000..21095721
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/tic54xcoff.sh b/binutils-2.17/ld/emulparams/tic54xcoff.sh
new file mode 100644
index 00000000..70c1ee2c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/tic80coff.sh b/binutils-2.17/ld/emulparams/tic80coff.sh
new file mode 100644
index 00000000..70703231
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/tic80coff.sh
@@ -0,0 +1,56 @@
+# 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
+
+# If this is defined, the genscripts.sh script sets TEXT_START_ADDR to
+# its value before running the scripttempl script for the -n and -N
+# options.
+#
+# NONPAGED_TEXT_START_ADDR=
+
+# 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.17/ld/emulparams/v850.sh b/binutils-2.17/ld/emulparams/v850.sh
new file mode 100644
index 00000000..96cdc680
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/vanilla.sh b/binutils-2.17/ld/emulparams/vanilla.sh
new file mode 100644
index 00000000..eabb7cdd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/vax.sh b/binutils-2.17/ld/emulparams/vax.sh
new file mode 100644
index 00000000..1bd1c107
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/vaxnbsd.sh b/binutils-2.17/ld/emulparams/vaxnbsd.sh
new file mode 100644
index 00000000..b16813fd
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/vaxnbsd.sh
@@ -0,0 +1,7 @@
+SCRIPT_NAME=aout
+TEXT_START_ADDR=0x1020
+OUTPUT_FORMAT="a.out-vax-netbsd"
+TARGET_PAGE_SIZE=0x1000
+ARCH=vax
+EXECUTABLE_SYMBOLS='__DYNAMIC = 0;'
+NONPAGED_TEXT_START_ADDR=0x1000
diff --git a/binutils-2.17/ld/emulparams/vsta.sh b/binutils-2.17/ld/emulparams/vsta.sh
new file mode 100644
index 00000000..cc6249be
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/vsta.sh
@@ -0,0 +1,8 @@
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-i386"
+TEXT_START_ADDR=0x1020
+TARGET_PAGE_SIZE=0x1000
+SEGMENT_SIZE=0x400000
+NONPAGED_TEXT_START_ADDR=0x0
+ARCH=i386
+
diff --git a/binutils-2.17/ld/emulparams/vxworks.sh b/binutils-2.17/ld/emulparams/vxworks.sh
new file mode 100644
index 00000000..4382859e
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/vxworks.sh
@@ -0,0 +1,28 @@
+# If you change this file, please also look at files which source this one:
+# elf_i386_vxworks.sh elf32ppcvxworks.sh elf32ebmipvxworks.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 (_etext = .);'
+
+ETEXT_NAME=etext_unrelocated
+OTHER_SYMBOLS="PROVIDE (_ehdr = ${TEXT_START_ADDR});"
+DATA_END_SYMBOLS=".edata : { PROVIDE (_edata = .); }"
+VXWORKS_BASE_EM_FILE=$EXTRA_EM_FILE
+EXTRA_EM_FILE=vxworks
+unset EMBEDDED
diff --git a/binutils-2.17/ld/emulparams/w65.sh b/binutils-2.17/ld/emulparams/w65.sh
new file mode 100644
index 00000000..6f02b232
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/xtensa-config.sh b/binutils-2.17/ld/emulparams/xtensa-config.sh
new file mode 100644
index 00000000..5a5e504e
--- /dev/null
+++ b/binutils-2.17/ld/emulparams/xtensa-config.sh
@@ -0,0 +1,3 @@
+# Xtensa configuration settings.
+
+MAXPAGESIZE=0x1000
diff --git a/binutils-2.17/ld/emulparams/z80.sh b/binutils-2.17/ld/emulparams/z80.sh
new file mode 100644
index 00000000..a4fdbd50
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/z8001.sh b/binutils-2.17/ld/emulparams/z8001.sh
new file mode 100644
index 00000000..63645c34
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emulparams/z8002.sh b/binutils-2.17/ld/emulparams/z8002.sh
new file mode 100644
index 00000000..299b5f5a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emultempl/README b/binutils-2.17/ld/emultempl/README
new file mode 100644
index 00000000..30ec0abf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emultempl/aix.em b/binutils-2.17/ld/emultempl/aix.em
new file mode 100644
index 00000000..d525edd8
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/aix.em
@@ -0,0 +1,1359 @@
+# 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
+cat >e${EMULATION_NAME}.c <<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
+ 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 GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "bfd.h"
+#include "sysdep.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;
+
+/* 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.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_EXPORT,
+ OPTION_IMPORT,
+ OPTION_INITFINI,
+ OPTION_LOADMAP,
+ OPTION_MAXDATA,
+ OPTION_MAXSTACK,
+ OPTION_MODTYPE,
+ OPTION_NOAUTOIMP,
+ 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},
+ {"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},
+ {"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 && strncmp (argv[indx], "-b", 2) == 0)
+ {
+ 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:
+ force_make_executable = FALSE;
+ break;
+
+ case OPTION_EROK:
+ force_make_executable = TRUE;
+ 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_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 (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 (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];
+ int i;
+
+ /* 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 (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;
+
+ 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;
+ }
+ }
+
+ /* Let the XCOFF backend set up the .loader section. */
+ if (!bfd_xcoff_size_dynamic_sections
+ (output_bfd, &link_info, libpath, entry_symbol.name, file_align,
+ maxstack, maxdata, gc && !unix_ld ? TRUE : FALSE,
+ modtype, textro ? TRUE : FALSE, unix_ld, 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);
+ }
+ }
+
+ 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 *file;
+
+ (void) obstack_finish (o);
+ keep = TRUE;
+ imppath = s;
+ file = NULL;
+ while (!ISSPACE (*s) && *s != '(' && *s != '\0')
+ {
+ if (*s == '/')
+ file = s + 1;
+ ++s;
+ }
+ if (file != NULL)
+ {
+ file[-1] = '\0';
+ impfile = file;
+ if (imppath == file - 1)
+ imppath = "/";
+ }
+ else
+ {
+ impfile = imppath;
+ imppath = "";
+ }
+ cs = *s;
+ *s = '\0';
+ 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);
+ 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 (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 (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 (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"
+
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<EOF
+
+static void
+gld${EMULATION_NAME}_create_output_section_statements (void)
+{
+ /* __rtinit */
+ if ((bfd_get_flavour (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", output_bfd);
+ if (initfini_file->the_bfd == NULL
+ || ! bfd_set_arch_mach (initfini_file->the_bfd,
+ bfd_get_arch (output_bfd),
+ bfd_get_mach (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 (output_bfd,
+ bfd_xcoff_architecture (output_bfd),
+ bfd_xcoff_machine (output_bfd));
+
+ ldfile_output_architecture = bfd_get_arch (output_bfd);
+ ldfile_output_machine = bfd_get_mach (output_bfd);
+ ldfile_output_machine_name = bfd_printable_name (output_bfd);
+}
+
+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,
+ 0, /* 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.17/ld/emultempl/alphaelf.em b/binutils-2.17/ld/emultempl/alphaelf.em
new file mode 100644
index 00000000..62eca180
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/alphaelf.em
@@ -0,0 +1,153 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2003, 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra alpha
+# specific routines.
+#
+cat >>e${EMULATION_NAME}.c <<EOF
+
+#include "elf/internal.h"
+#include "elf/alpha.h"
+#include "elf-bfd.h"
+
+static bfd_boolean limit_32bit;
+static bfd_boolean disable_relaxation;
+
+extern bfd_boolean elf64_alpha_use_secureplt;
+extern const bfd_target bfd_elf64_alpha_vec;
+extern const bfd_target bfd_elf64_alpha_freebsd_vec;
+
+
+/* Set the start address as in the Tru64 ld. */
+#define ALPHA_TEXT_START_32BIT 0x12000000
+
+static void
+alpha_after_open (void)
+{
+ if (link_info.hash->creator == &bfd_elf64_alpha_vec
+ || link_info.hash->creator == &bfd_elf64_alpha_freebsd_vec)
+ {
+ 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);
+}
+
+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 && !disable_relaxation)
+ command_line.relax = TRUE;
+}
+
+static void
+alpha_finish (void)
+{
+ if (limit_32bit)
+ elf_elfheader (output_bfd)->e_flags |= EF_ALPHA_32BIT;
+
+ gld${EMULATION_NAME}_finish ();
+}
+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_NO_RELAX (OPTION_TASO + 1)
+#define OPTION_SECUREPLT (OPTION_NO_RELAX + 1)
+#define OPTION_NO_SECUREPLT (OPTION_SECUREPLT + 1)
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "taso", no_argument, NULL, OPTION_TASO },
+ { "no-relax", no_argument, NULL, OPTION_NO_RELAX },
+ { "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\
+ --no-relax Do not relax call and gp sequences.\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_NO_RELAX:
+ disable_relaxation = TRUE;
+ 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.17/ld/emultempl/armcoff.em b/binutils-2.17/ld/emultempl/armcoff.em
new file mode 100644
index 00000000..d5fd67d8
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/armcoff.em
@@ -0,0 +1,281 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+cat >e${EMULATION_NAME}.c <<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 Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+This file is part of GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "bfd.h"
+#include "sysdep.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 (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)
+{
+ struct bfd_link_hash_entry * h;
+
+ if (thumb_entry_symbol == NULL)
+ return;
+
+ 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 (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: connot 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"
+
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/armelf.em b/binutils-2.17/ld/emultempl/armelf.em
new file mode 100644
index 00000000..bd74ab57
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/armelf.em
@@ -0,0 +1,301 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+# 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra arm-elf
+# specific routines.
+#
+test -z "$TARGET2_TYPE" && TARGET2_TYPE="rel"
+cat >>e${EMULATION_NAME}.c <<EOF
+
+#include "elf/arm.h"
+
+static char *thumb_entry_symbol = NULL;
+static bfd *bfd_for_interwork;
+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 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_after_open (void)
+{
+ if (strstr (bfd_get_target (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)
+ {
+ bfd_elf32_arm_add_glue_sections_to_bfd (is->the_bfd, & link_info);
+ }
+ }
+
+ /* Call the standard elf routine. */
+ gld${EMULATION_NAME}_after_open ();
+}
+
+static void
+arm_elf_set_bfd_for_interworking (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)
+ {
+ asection *output_section = i->output_section;
+
+ ASSERT (output_section->owner == output_bfd);
+
+ /* Don't attach the interworking stubs to a dynamic object, to
+ an empty section, etc. */
+ if ((output_section->flags & SEC_HAS_CONTENTS) != 0
+ && (i->flags & SEC_NEVER_LOAD) == 0
+ && ! (i->owner->flags & DYNAMIC)
+ && ! i->owner->output_has_begun)
+ {
+ bfd_for_interwork = i->owner;
+ bfd_for_interwork->output_has_begun = TRUE;
+ }
+ }
+ }
+}
+
+static void
+arm_elf_before_allocation (void)
+{
+ bfd *tem;
+
+ /* Call the standard elf routine. */
+ gld${EMULATION_NAME}_before_allocation ();
+
+ if (link_info.input_bfds != NULL)
+ {
+ /* The interworking bfd must be the last one in the link. */
+ bfd_for_interwork = NULL;
+ for (tem = link_info.input_bfds; tem != NULL; tem = tem->link_next)
+ tem->output_has_begun = FALSE;
+
+ lang_for_each_statement (arm_elf_set_bfd_for_interworking);
+ for (tem = link_info.input_bfds; tem != NULL; tem = tem->link_next)
+ tem->output_has_begun = FALSE;
+
+ /* If bfd_for_interwork is NULL, then there are no loadable sections
+ with real contents to be linked, so we are not going to have to
+ create any interworking stubs, so it is OK not to call
+ bfd_elf32_arm_get_bfd_for_interworking. */
+ if (bfd_for_interwork != NULL)
+ bfd_elf32_arm_get_bfd_for_interworking (bfd_for_interwork, &link_info);
+ }
+ /* 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_elf32_arm_process_before_allocation (is->the_bfd, & link_info,
+ byteswap_code))
+ {
+ /* 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);
+}
+
+static void
+arm_elf_finish (void)
+{
+ struct bfd_link_hash_entry * h;
+
+ /* Call the elf32.em routine. */
+ gld${EMULATION_NAME}_finish ();
+
+ 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 (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: connot find thumb start symbol %s\n"),
+ thumb_entry_symbol);
+}
+
+/* This is a convenitent 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)
+{
+ bfd_elf32_arm_set_target_relocs (&link_info, target1_is_rel, target2_type,
+ fix_v4bx, use_blx);
+}
+
+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
+'
+
+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},
+ { "use-blx", no_argument, NULL, OPTION_USE_BLX},
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _(" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"));
+ fprintf (file, _(" --be8 Oputput 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, _(" --use-blx Enable use of BLX instructions\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_USE_BLX:
+ use_blx = 1;
+ break;
+'
+
+# 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=arm_elf_after_open
+LDEMUL_BEFORE_ALLOCATION=arm_elf_before_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=arm_elf_finish
diff --git a/binutils-2.17/ld/emultempl/astring.sed b/binutils-2.17/ld/emultempl/astring.sed
new file mode 100644
index 00000000..08bd8a64
--- /dev/null
+++ b/binutils-2.17/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.17/ld/emultempl/beos.em b/binutils-2.17/ld/emultempl/beos.em
new file mode 100644
index 00000000..220ba590
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/beos.em
@@ -0,0 +1,786 @@
+# 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
+cat >e${EMULATION_NAME}.c <<EOF
+/* This file is part of GLD, the Gnu Linker.
+ Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005 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 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 "bfd.h"
+#include "sysdep.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;
+ lang_statement_list_type *save;
+
+ 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 */
+ save = stat_ptr;
+
+ 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. */
+ stat_ptr = save;
+
+ 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(output_bfd)->pe)
+ {
+ einfo ("%F%P: PE operations on non PE file.\n");
+ }
+
+ pe_data(output_bfd)->pe_opthdr = pe;
+ pe_data(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 ((strncmp ((*ra)->input_section.section->name, ".stab", 5) == 0)
+ && (strncmp ((*rb)->input_section.section->name, ".stab", 5) != 0))
+ return 1;
+ return i;
+ }
+ 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
+ && strncmp (sec->spec.name, ".idata", 6) == 0)
+ {
+ /* 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)
+{
+ extern lang_statement_list_type *stat_ptr;
+
+#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 bfd_boolean
+gld${EMULATION_NAME}_place_orphan (asection *s)
+{
+ const char *secname;
+ char *output_secname, *ps;
+ lang_output_section_statement_type *os;
+ lang_statement_union_type *l;
+
+ if ((s->flags & SEC_ALLOC) == 0)
+ return FALSE;
+
+ /* 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 FALSE;
+
+ secname = bfd_get_section_name (s->owner, s);
+
+ /* 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 FALSE;
+
+ /* 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);
+
+ /* 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 TRUE;
+}
+
+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"
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/crxelf.em b/binutils-2.17/ld/emultempl/crxelf.em
new file mode 100644
index 00000000..48cb954d
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/crxelf.em
@@ -0,0 +1,94 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2004
+# Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra crx-elf
+# specific routines.
+#
+cat >>e${EMULATION_NAME}.c <<EOF
+
+#include "ldctor.h"
+
+/* Flag for the emulation-specific "--no-relax" option. */
+static bfd_boolean disable_relaxation = FALSE;
+
+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;
+}
+
+/* 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 (!disable_relaxation)
+ command_line.relax = TRUE;
+}
+
+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_RELAX 301
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "no-relax", no_argument, NULL, OPTION_NO_RELAX},
+'
+
+PARSE_AND_LIST_OPTIONS='
+ fprintf (file, _(" --no-relax Do not relax branches\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_NO_RELAX:
+ disable_relaxation = TRUE;
+ break;
+'
+
+# 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.17/ld/emultempl/elf32.em b/binutils-2.17/ld/emultempl/elf32.em
new file mode 100644
index 00000000..19259796
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/elf32.em
@@ -0,0 +1,1971 @@
+# 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
+cat >e${EMULATION_NAME}.c <<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 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 GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "config.h"
+#include "bfd.h"
+#include "sysdep.h"
+#include "libiberty.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 "ldfile.h"
+#include "ldemul.h"
+#include <ldgram.h>
+#include "elf/common.h"
+#include "elf-bfd.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 bfd_boolean gld${EMULATION_NAME}_place_orphan (asection *s);
+static void gld${EMULATION_NAME}_layout_sections_again (void);
+static void gld${EMULATION_NAME}_finish (void) ATTRIBUTE_UNUSED;
+
+EOF
+
+if [ "x${USE_LIBPATH}" = xyes ] ; then
+ case ${target} in
+ *-*-linux-* | *-*-k*bsd*-*)
+ cat >>e${EMULATION_NAME}.c <<EOF
+#ifdef HAVE_GLOB
+#include <glob.h>
+#endif
+EOF
+ ;;
+ esac
+fi
+
+# Import any needed special functions and/or overrides.
+#
+if test -n "$EXTRA_EM_FILE" ; then
+. ${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
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<EOF
+/* Handle as_needed DT_NEEDED. */
+
+static bfd_boolean
+gld${EMULATION_NAME}_load_symbols (lang_input_statement_type *entry)
+{
+ int 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->as_needed)
+ 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_needed)
+ 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 (!class
+ || (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) == 0)
+ return FALSE;
+
+ bfd_elf_set_dyn_lib_class (entry->the_bfd, class);
+
+ /* Continue on with normal load_symbols processing. */
+ return FALSE;
+}
+EOF
+fi
+
+cat >>e${EMULATION_NAME}.c <<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;
+
+
+/* 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 class;
+
+ abfd = bfd_openr (name, bfd_get_target (output_bfd));
+ if (abfd == NULL)
+ return FALSE;
+ 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 != 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 *needed;
+
+ if (! bfd_elf_get_bfd_needed_list (abfd, &needed))
+ einfo ("%F%P:%B: bfd_elf_get_bfd_needed_list failed: %E\n", abfd);
+
+ if (needed != NULL)
+ {
+ global_vercheck_needed = needed;
+ 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*-*)
+ cat >>e${EMULATION_NAME}.c <<EOF
+ {
+ struct bfd_link_needed_list *l;
+
+ for (l = needed; l != NULL; l = l->next)
+ if (strncmp (l->name, "libc.so", 7) == 0)
+ break;
+ if (l == NULL)
+ {
+ bfd_close (abfd);
+ return FALSE;
+ }
+ }
+
+EOF
+ ;;
+esac
+cat >>e${EMULATION_NAME}.c <<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. */
+ 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)
+ class |= DYN_NO_NEEDED | DYN_NO_ADD_NEEDED;
+
+ bfd_elf_set_dyn_lib_class (abfd, 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, ':');
+ if (s == NULL)
+ s = path + strlen (path);
+
+ 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
+ cat >>e${EMULATION_NAME}.c <<EOF
+
+/* Add the sysroot to every entry in a colon-separated path. */
+
+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++] == ':')
+ 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] == ':')
+ {
+ *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*)
+ cat >>e${EMULATION_NAME}.c <<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, 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*-*)
+ cat >>e${EMULATION_NAME}.c <<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 (!strncmp (p, "include", 7) && (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++] = ':';
+ }
+ 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", NULL);
+ if (!gld${EMULATION_NAME}_parse_ld_so_conf (&info, tmppath))
+ {
+ free (tmppath);
+ tmppath = concat (ld_sysroot, "/etc/ld.so.conf", 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
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<EOF
+
+/* 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.executable)
+ return;
+
+ /* 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. */
+ needed = bfd_elf_get_needed_list (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
+cat >>e${EMULATION_NAME}.c <<EOF
+ const char *lib_path;
+EOF
+fi
+if [ "x${USE_LIBPATH}" = xyes ] ; then
+cat >>e${EMULATION_NAME}.c <<EOF
+ struct bfd_link_needed_list *rp;
+ int found;
+EOF
+fi
+cat >>e${EMULATION_NAME}.c <<EOF
+
+ if (gld${EMULATION_NAME}_search_needed (command_line.rpath_link,
+ &n, force))
+ break;
+EOF
+if [ "x${USE_LIBPATH}" = xyes ] ; then
+cat >>e${EMULATION_NAME}.c <<EOF
+ if (gld${EMULATION_NAME}_search_needed (command_line.rpath,
+ &n, force))
+ break;
+EOF
+fi
+if [ "x${NATIVE}" = xyes ] ; then
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<EOF
+ found = 0;
+ rp = bfd_elf_get_runpath_list (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*)
+ cat >>e${EMULATION_NAME}.c <<EOF
+ if (gld${EMULATION_NAME}_check_ld_elf_hints (l->name, force))
+ break;
+EOF
+ # FreeBSD
+ ;;
+
+ *-*-linux-* | *-*-k*bsd*-*)
+ # Linux
+ cat >>e${EMULATION_NAME}.c <<EOF
+ if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
+ break;
+
+EOF
+ ;;
+ esac
+fi
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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:
+ 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 (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
+cat >>e${EMULATION_NAME}.c <<EOF
+
+/* 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;
+
+ if (link_info.hash->type == bfd_link_elf_hash_table)
+ _bfd_elf_tls_setup (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");
+ if (! (bfd_elf_size_dynamic_sections
+ (output_bfd, command_line.soname, rpath,
+ command_line.filter_shlib,
+ (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;
+ bfd_size_type prefix_len;
+ char *msg;
+ bfd_boolean ret;
+ const char * gnu_warning_prefix = _("warning: ");
+
+ if (is->just_syms_flag)
+ continue;
+
+ s = bfd_get_section_by_name (is->the_bfd, ".gnu.warning");
+ if (s == NULL)
+ continue;
+
+ sz = s->size;
+ prefix_len = strlen (gnu_warning_prefix);
+ msg = xmalloc ((size_t) (prefix_len + sz + 1));
+ strcpy (msg, gnu_warning_prefix);
+ if (! bfd_get_section_contents (is->the_bfd, s, msg + prefix_len,
+ (file_ptr) 0, sz))
+ einfo ("%F%B: Can't read contents of section .gnu.warning: %E\n",
+ is->the_bfd);
+ msg[prefix_len + 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 copying the
+ warning into the output file. */
+ s->size = 0;
+
+ /* Also set SEC_EXCLUDE, so that symbols defined in the warning
+ section don't get copied to the output. */
+ s->flags |= SEC_EXCLUDE;
+ }
+ }
+
+ before_allocation_default ();
+
+ if (!bfd_elf_size_dynsym_hash_dynstr (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
+cat >>e${EMULATION_NAME}.c <<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;
+ }
+
+ 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
+cat >>e${EMULATION_NAME}.c <<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_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 != -1
+ && strncmp (".rel", lookup->name, 4) == 0)
+ {
+ 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 (last_rel_alloc)
+ return last_rel_alloc;
+
+ if (last_rel)
+ return last_rel;
+
+ 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 bfd_boolean
+gld${EMULATION_NAME}_place_orphan (asection *s)
+{
+ 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 }
+ };
+ enum orphan_save_index
+ {
+ orphan_text = 0,
+ orphan_rodata,
+ orphan_data,
+ orphan_bss,
+ orphan_rel,
+ orphan_interp,
+ orphan_sdata
+ };
+ static int orphan_init_done = 0;
+ struct orphan_save *place;
+ const char *secname;
+ lang_output_section_statement_type *after;
+ lang_output_section_statement_type *os;
+ int isdyn = 0;
+ int iself = s->owner->xvec->flavour == bfd_target_elf_flavour;
+ unsigned int sh_type = iself ? elf_section_type (s) : SHT_NULL;
+
+ secname = bfd_get_section_name (s->owner, s);
+
+ 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 (strncmp (secname, ".rel", 4) == 0)
+ {
+ secname = secname[4] == 'a' ? ".rela.dyn" : ".rel.dyn";
+ isdyn = 1;
+ }
+ }
+
+ if (isdyn || (!config.unique_orphan_sections && !unique_section_p (s)))
+ {
+ /* Look through the script to see where to place this section. */
+ os = lang_output_section_find (secname);
+
+ if (os != NULL
+ && (os->bfd_section == NULL
+ || os->bfd_section->flags == 0
+ || (_bfd_elf_match_sections_by_type (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, if any, 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 TRUE;
+ }
+ }
+
+ 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;
+ }
+
+ /* 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
+ && strncmp (secname, ".gnu.warning.", sizeof ".gnu.warning." - 1) == 0
+ && hold[orphan_text].os != NULL)
+ {
+ lang_add_section (&hold[orphan_text].os->children, s,
+ hold[orphan_text].os);
+ return TRUE;
+ }
+
+ /* 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) == 0)
+ ;
+ else if ((s->flags & SEC_LOAD) != 0
+ && ((iself && sh_type == SHT_NOTE)
+ || (!iself && strncmp (secname, ".note", 5) == 0)))
+ 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 && strncmp (secname, ".rel", 4) == 0))
+ && (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;
+ }
+
+ /* Choose a unique name for the section. This will be needed if the
+ same section name appears in the input file with different
+ loadable or allocatable characteristics. */
+ if (bfd_get_section_by_name (output_bfd, secname) != NULL)
+ {
+ static int count = 1;
+ secname = bfd_get_unique_section_name (output_bfd, secname, &count);
+ if (secname == NULL)
+ einfo ("%F%P: place_orphan failed: %E\n");
+ }
+
+ lang_insert_orphan (s, secname, after, place, NULL, NULL);
+
+ return TRUE;
+}
+EOF
+fi
+
+if test x"$LDEMUL_FINISH" != xgld"$EMULATION_NAME"_finish; then
+cat >>e${EMULATION_NAME}.c <<EOF
+
+static void
+gld${EMULATION_NAME}_layout_sections_again (void)
+{
+ lang_reset_memory_regions ();
+
+ /* Resize the sections. */
+ lang_size_sections (NULL, TRUE);
+
+ /* Redo special stuff. */
+ ldemul_after_allocation ();
+
+ /* Do the assignments again. */
+ lang_do_assignments ();
+}
+
+static void
+gld${EMULATION_NAME}_finish (void)
+{
+ if (bfd_elf_discard_info (output_bfd, &link_info))
+ gld${EMULATION_NAME}_layout_sections_again ();
+
+ finish_default ();
+}
+EOF
+fi
+
+if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
+cat >>e${EMULATION_NAME}.c <<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"
+
+cat >>e${EMULATION_NAME}.c <<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 & DT_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 & DT_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 & DT_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.
+
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<EOF
+ else if (link_info.pie && link_info.combreloc
+ && link_info.relro && (link_info.flags & DT_BIND_NOW))
+ return "ldscripts/${EMULATION_NAME}.xdw";
+ else if (link_info.pie && link_info.combreloc)
+ return "ldscripts/${EMULATION_NAME}.xdc";
+EOF
+fi
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<EOF
+ else if (link_info.shared && link_info.combreloc
+ && link_info.relro && (link_info.flags & DT_BIND_NOW))
+ return "ldscripts/${EMULATION_NAME}.xsw";
+ else if (link_info.shared && link_info.combreloc)
+ return "ldscripts/${EMULATION_NAME}.xsc";
+EOF
+fi
+cat >>e${EMULATION_NAME}.c <<EOF
+ else if (link_info.shared)
+ return "ldscripts/${EMULATION_NAME}.xs";
+EOF
+fi
+if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
+cat >>e${EMULATION_NAME}.c <<EOF
+ else if (link_info.combreloc && link_info.relro
+ && (link_info.flags & DT_BIND_NOW))
+ return "ldscripts/${EMULATION_NAME}.xw";
+ else if (link_info.combreloc)
+ return "ldscripts/${EMULATION_NAME}.xc";
+EOF
+fi
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<EOF
+ $PARSE_AND_LIST_PROLOGUE
+EOF
+fi
+
+cat >>e${EMULATION_NAME}.c <<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)
+
+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:";
+ static const struct option xtra_long[] = {
+EOF
+
+if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+cat >>e${EMULATION_NAME}.c <<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},
+ {"Bgroup", no_argument, NULL, OPTION_GROUP},
+EOF
+fi
+
+if test -n "$PARSE_AND_LIST_LONGOPTS" ; then
+cat >>e${EMULATION_NAME}.c <<EOF
+ $PARSE_AND_LIST_LONGOPTS
+EOF
+fi
+
+cat >>e${EMULATION_NAME}.c <<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));
+}
+
+static bfd_boolean
+gld${EMULATION_NAME}_handle_option (int optc)
+{
+ switch (optc)
+ {
+ default:
+ return FALSE;
+
+EOF
+
+if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+cat >>e${EMULATION_NAME}.c <<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 '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, "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;
+ }
+ else if (strcmp (optarg, "relro") == 0)
+ link_info.relro = TRUE;
+ else if (strcmp (optarg, "norelro") == 0)
+ link_info.relro = FALSE;
+ /* What about the other Solaris -z options? FIXME. */
+ break;
+EOF
+fi
+
+if test -n "$PARSE_AND_LIST_ARGS_CASES" ; then
+cat >>e${EMULATION_NAME}.c <<EOF
+ $PARSE_AND_LIST_ARGS_CASES
+EOF
+fi
+
+cat >>e${EMULATION_NAME}.c <<EOF
+ }
+
+ return TRUE;
+}
+
+EOF
+
+if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
+cat >>e${EMULATION_NAME}.c <<EOF
+
+static void
+gld${EMULATION_NAME}_list_options (FILE * file)
+{
+EOF
+
+if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+cat >>e${EMULATION_NAME}.c <<EOF
+ fprintf (file, _(" -Bgroup\t\tSelects group name lookup rules for DSO\n"));
+ fprintf (file, _(" --disable-new-dtags\tDisable new dynamic tags\n"));
+ fprintf (file, _(" --enable-new-dtags\tEnable new dynamic tags\n"));
+ fprintf (file, _(" --eh-frame-hdr\tCreate .eh_frame_hdr section\n"));
+ fprintf (file, _(" -z combreloc\t\tMerge dynamic relocs into one section and sort\n"));
+ fprintf (file, _(" -z defs\t\tReport unresolved symbols in object files.\n"));
+ fprintf (file, _(" -z execstack\t\tMark executable as requiring executable stack\n"));
+ fprintf (file, _(" -z initfirst\t\tMark DSO to be initialized first at runtime\n"));
+ fprintf (file, _(" -z interpose\t\tMark object to interpose all DSOs but executable\n"));
+ fprintf (file, _(" -z loadfltr\t\tMark object requiring immediate process\n"));
+ fprintf (file, _(" -z muldefs\t\tAllow multiple definitions\n"));
+ fprintf (file, _(" -z nocombreloc\tDon't merge dynamic relocs into one section\n"));
+ fprintf (file, _(" -z nocopyreloc\tDon't create copy relocs\n"));
+ fprintf (file, _(" -z nodefaultlib\tMark object not to use default search paths\n"));
+ fprintf (file, _(" -z nodelete\t\tMark DSO non-deletable at runtime\n"));
+ fprintf (file, _(" -z nodlopen\t\tMark DSO not available to dlopen\n"));
+ fprintf (file, _(" -z nodump\t\tMark DSO not available to dldump\n"));
+ fprintf (file, _(" -z noexecstack\tMark executable as not requiring executable stack\n"));
+ fprintf (file, _(" -z norelro\t\tDon't create RELRO program header\n"));
+ fprintf (file, _(" -z now\t\tMark object non-lazy runtime binding\n"));
+ fprintf (file, _(" -z origin\t\tMark object requiring immediate \$ORIGIN processing\n\t\t\t at runtime\n"));
+ fprintf (file, _(" -z relro\t\tCreate RELRO program header\n"));
+ fprintf (file, _(" -z KEYWORD\t\tIgnored for Solaris compatibility\n"));
+EOF
+fi
+
+if test -n "$PARSE_AND_LIST_OPTIONS" ; then
+cat >>e${EMULATION_NAME}.c <<EOF
+ $PARSE_AND_LIST_OPTIONS
+EOF
+fi
+
+cat >>e${EMULATION_NAME}.c <<EOF
+}
+EOF
+
+if test -n "$PARSE_AND_LIST_EPILOGUE" ; then
+cat >>e${EMULATION_NAME}.c <<EOF
+ $PARSE_AND_LIST_EPILOGUE
+EOF
+fi
+fi
+else
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<EOF
+#define gld${EMULATION_NAME}_list_options NULL
+EOF
+fi
+fi
+
+cat >>e${EMULATION_NAME}.c <<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-after_allocation_default},
+ ${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-gld${EMULATION_NAME}_finish},
+ ${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.17/ld/emultempl/generic.em b/binutils-2.17/ld/emultempl/generic.em
new file mode 100644
index 00000000..985cdf8e
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/generic.em
@@ -0,0 +1,148 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+cat >e${EMULATION_NAME}.c <<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
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+This file is part of GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "bfd.h"
+#include "sysdep.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
+. ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
+fi
+
+if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<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"
+
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/gld960.em b/binutils-2.17/ld/emultempl/gld960.em
new file mode 100644
index 00000000..63b5bb34
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/gld960.em
@@ -0,0 +1,154 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+cat >e${EMULATION_NAME}.c <<EOF
+/* Copyright 1991, 1992, 1994, 1999, 2000, 2001, 2002, 2003, 2005
+ Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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 1, or (at your option)
+any later version.
+
+GLD 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. */
+
+/*
+ * emulate the Intels port of gld
+ */
+
+
+#include "bfd.h"
+#include "sysdep.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(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"
+
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/gld960c.em b/binutils-2.17/ld/emultempl/gld960c.em
new file mode 100644
index 00000000..6973a06d
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/gld960c.em
@@ -0,0 +1,169 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+cat >e${EMULATION_NAME}.c <<EOF
+/* Copyright 1991, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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 1, or (at your option)
+any later version.
+
+GLD 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. */
+
+/*
+ * emulate the Intels port of gld
+ */
+
+
+#include "bfd.h"
+#include "sysdep.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"
+
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/hppaelf.em b/binutils-2.17/ld/emultempl/hppaelf.em
new file mode 100644
index 00000000..82f37b69
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/hppaelf.em
@@ -0,0 +1,385 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 1991, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra hppa-elf
+# specific routines.
+#
+cat >>e${EMULATION_NAME}.c <<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);
+ */
+}
+
+/* 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)
+{
+ extern const bfd_target bfd_elf32_hppa_linux_vec;
+ extern const bfd_target bfd_elf32_hppa_nbsd_vec;
+ extern const bfd_target bfd_elf32_hppa_vec;
+
+ if (link_info.hash->creator != &bfd_elf32_hppa_linux_vec
+ && link_info.hash->creator != &bfd_elf32_hppa_nbsd_vec
+ && link_info.hash->creator != &bfd_elf32_hppa_vec)
+ return;
+
+ stub_file = lang_add_input_file ("linker stubs",
+ lang_input_file_is_fake_enum,
+ NULL);
+ stub_file->the_bfd = bfd_create ("linker stubs", output_bfd);
+ if (stub_file->the_bfd == NULL
+ || ! bfd_set_arch_mach (stub_file->the_bfd,
+ bfd_get_arch (output_bfd),
+ bfd_get_mach (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;
+
+ stub_sec = bfd_make_section_anyway (stub_file->the_bfd, stub_sec_name);
+ if (stub_sec == NULL)
+ goto err_ret;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP);
+ if (!bfd_set_section_flags (stub_file->the_bfd, stub_sec, flags))
+ 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. */
+ need_laying_out = 0;
+
+ gld${EMULATION_NAME}_layout_sections_again ();
+}
+
+
+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 == output_bfd)
+ {
+ elf32_hppa_next_input_section (&link_info, i);
+ }
+ }
+}
+
+
+/* Final emulation specific call. For the PA we use this opportunity
+ to build linker stubs. */
+
+static void
+hppaelf_finish (void)
+{
+ /* bfd_elf_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 (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 (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 (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)
+ hppaelf_layout_sections_again ();
+
+ if (! link_info.relocatable)
+ {
+ /* Set the global data pointer. */
+ if (! elf32_hppa_set_gp (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");
+ }
+ }
+
+ finish_default ();
+}
+
+
+/* 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 can be\n\
+ handled by one stub section. A negative value\n\
+ locates all stubs before 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"
+ ));
+'
+
+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_FINISH=hppaelf_finish
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=hppaelf_create_output_section_statements
diff --git a/binutils-2.17/ld/emultempl/ia64elf.em b/binutils-2.17/ld/emultempl/ia64elf.em
new file mode 100644
index 00000000..ddc5370b
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/ia64elf.em
@@ -0,0 +1,62 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2003 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra ia64-elf
+# specific routines.
+#
+# Define some shell vars to insert bits of code into the standard elf
+# parse_args and list_options functions.
+#
+cat >>e${EMULATION_NAME}.c <<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);
+}
+
+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
+. ${srcdir}/emultempl/needrelax.em
diff --git a/binutils-2.17/ld/emultempl/irix.em b/binutils-2.17/ld/emultempl/irix.em
new file mode 100644
index 00000000..5dfc2a44
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/irix.em
@@ -0,0 +1,41 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2004, 2006 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+cat >>e${EMULATION_NAME}.c <<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 (output_bfd));
+
+ gld${EMULATION_NAME}_after_open ();
+}
+EOF
+
+LDEMUL_AFTER_OPEN=irix_after_open
diff --git a/binutils-2.17/ld/emultempl/linux.em b/binutils-2.17/ld/emultempl/linux.em
new file mode 100644
index 00000000..996a7ea1
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/linux.em
@@ -0,0 +1,209 @@
+# 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
+cat >e${EMULATION_NAME}.c <<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 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 GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "bfd.h"
+#include "sysdep.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 (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"
+
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/lnk960.em b/binutils-2.17/ld/emultempl/lnk960.em
new file mode 100644
index 00000000..95384d42
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/lnk960.em
@@ -0,0 +1,289 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+cat >e${EMULATION_NAME}.c <<EOF
+/* intel coff loader emulation specific stuff
+ Copyright 1991, 1992, 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003, 2005
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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.
+
+GLD 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. */
+
+#include "libiberty.h"
+#include "bfd.h"
+#include "sysdep.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", 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 (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"
+
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/m68hc1xelf.em b/binutils-2.17/ld/emultempl/m68hc1xelf.em
new file mode 100644
index 00000000..4cdfcc21
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/m68hc1xelf.em
@@ -0,0 +1,375 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 1991, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra 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.
+#
+cat >>e${EMULATION_NAME}.c <<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 (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 (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", output_bfd);
+ if (stub_file->the_bfd == NULL
+ || !bfd_set_arch_mach (stub_file->the_bfd,
+ bfd_get_arch (output_bfd),
+ bfd_get_mach (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;
+
+ stub_sec = bfd_make_section_anyway (stub_file->the_bfd, stub_sec_name);
+ if (stub_sec == NULL)
+ goto err_ret;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP);
+ if (!bfd_set_section_flags (stub_file->the_bfd, stub_sec, flags))
+ 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;
+}
+
+/* Final emulation specific call. For the 68HC12 we use this opportunity
+ to build linker stubs. */
+
+static void
+m68hc11elf_finish (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 (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 (output_bfd, &link_info))
+ einfo ("%X%P: can not build stubs: %E\n");
+ }
+
+ gld${EMULATION_NAME}_finish ();
+}
+
+
+/* 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_FINISH=m68hc11elf_finish
+LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=m68hc11elf_create_output_section_statements
diff --git a/binutils-2.17/ld/emultempl/m68kcoff.em b/binutils-2.17/ld/emultempl/m68kcoff.em
new file mode 100644
index 00000000..4bf3994b
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/m68kcoff.em
@@ -0,0 +1,242 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+cat >e${EMULATION_NAME}.c <<EOF
+/* This file is is generated by a shell script. DO NOT EDIT! */
+
+/* Handle embedded relocs for m68k.
+ Copyright 2000, 2002, 2003, 2004, 2005 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 GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "bfd.h"
+#include "sysdep.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 (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 * 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"
+
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/m68kelf.em b/binutils-2.17/ld/emultempl/m68kelf.em
new file mode 100644
index 00000000..960cfe4c
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/m68kelf.em
@@ -0,0 +1,188 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2000, 2001, 2003 Free Software Foundation, Inc.
+# Written by Michael Sokolov <msokolov@ivan.Harhan.ORG>, based on armelf.em
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# This file is sourced from elf32.em, and defines 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
+
+cat >>e${EMULATION_NAME}.c <<EOF
+
+#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 (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 * 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. */
+ after_allocation_default ();
+
+#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 */
+}
+
+EOF
+
+# 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
diff --git a/binutils-2.17/ld/emultempl/mipsecoff.em b/binutils-2.17/ld/emultempl/mipsecoff.em
new file mode 100644
index 00000000..780cc60c
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/mipsecoff.em
@@ -0,0 +1,37 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+if [ -z "$MACHINE" ]; then
+ OUTPUT_ARCH=${ARCH}
+else
+ OUTPUT_ARCH=${ARCH}:${MACHINE}
+fi
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/mmix-elfnmmo.em b/binutils-2.17/ld/emultempl/mmix-elfnmmo.em
new file mode 100644
index 00000000..4ca6e523
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/mmix-elfnmmo.em
@@ -0,0 +1,111 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em and mmo.em, used to define
+# MMIX-specific things common to ELF and MMO.
+
+cat >>e${EMULATION_NAME}.c <<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). */
+ command_line.relax = TRUE;
+
+ if (!_bfd_mmix_before_linker_allocation (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_get_section_by_name (output_bfd, MMIX_REG_CONTENTS_SECTION_NAME);
+ bfd_signed_vma regvma;
+
+ /* 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. */
+ if (sec == NULL)
+ sec
+ = bfd_get_section_by_name (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 (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 (output_bfd, MMIX_REG_SECTION_NAME);
+ if (sec != NULL)
+ bfd_set_section_vma (abfd, sec, 0);
+
+ if (!_bfd_mmix_after_linker_allocation (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.17/ld/emultempl/mmixelf.em b/binutils-2.17/ld/emultempl/mmixelf.em
new file mode 100644
index 00000000..9954343f
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/mmixelf.em
@@ -0,0 +1,44 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em and used to define MMIX and ELF
+# specific things. First include what we have in common with mmo.
+
+. ${srcdir}/emultempl/mmix-elfnmmo.em
+
+cat >>e${EMULATION_NAME}.c <<EOF
+#line 29 "${srcdir}/emultempl/elfmmix.em"
+
+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.17/ld/emultempl/mmo.em b/binutils-2.17/ld/emultempl/mmo.em
new file mode 100644
index 00000000..0a7d648b
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/mmo.em
@@ -0,0 +1,147 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em and mmo.em, used to define
+# linker MMIX-specifics common to ELF and MMO.
+
+cat >>e${EMULATION_NAME}.c <<EOF
+/* Need to have this define before mmix-elfnmmo, which includes
+ needrelax.em which uses this name for the before_allocation function,
+ normally defined in elf32.em. */
+#define gldmmo_before_allocation before_allocation_default
+EOF
+
+. ${srcdir}/emultempl/mmix-elfnmmo.em
+
+cat >>e${EMULATION_NAME}.c <<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 bfd_boolean
+mmo_place_orphan (asection *s)
+{
+ 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;
+ const char *secname;
+ 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 FALSE;
+
+ /* Only care for sections we're going to load. */
+ secname = s->name;
+ 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 TRUE;
+ }
+
+ /* 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 FALSE;
+
+ 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, 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 TRUE;
+}
+
+/* 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
+mmo_finish (void)
+{
+ bfd_map_over_sections (output_bfd, mmo_wipe_sec_reloc_flag, NULL);
+ finish_default ();
+}
+
+/* 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 (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_FINISH=mmo_finish
+LDEMUL_AFTER_OPEN=mmo_after_open
diff --git a/binutils-2.17/ld/emultempl/needrelax.em b/binutils-2.17/ld/emultempl/needrelax.em
new file mode 100644
index 00000000..aaa85d0b
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/needrelax.em
@@ -0,0 +1,38 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em. 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
+
+cat >>e${EMULATION_NAME}.c <<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)
+ command_line.relax = TRUE;
+}
+EOF
diff --git a/binutils-2.17/ld/emultempl/netbsd.em b/binutils-2.17/ld/emultempl/netbsd.em
new file mode 100644
index 00000000..43715e40
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/netbsd.em
@@ -0,0 +1,13 @@
+LDEMUL_BEFORE_PARSE=gldnetbsd_before_parse
+
+cat >>e${EMULATION_NAME}.c <<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_aymbols = bfd_link_common_skip_text;
+}
+EOF
diff --git a/binutils-2.17/ld/emultempl/ostring.sed b/binutils-2.17/ld/emultempl/ostring.sed
new file mode 100644
index 00000000..a526d3ff
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/ostring.sed
@@ -0,0 +1,4 @@
+s/["\\]/\\&/g
+s/$/\\n\\/
+1 s/^/"/
+$ s/$/n"/
diff --git a/binutils-2.17/ld/emultempl/pe.em b/binutils-2.17/ld/emultempl/pe.em
new file mode 100644
index 00000000..5afa8da0
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/pe.em
@@ -0,0 +1,1845 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+test -z "${ENTRY}" && ENTRY="_mainCRTStartup"
+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 ;-)
+cat >>e${EMULATION_NAME}.c <<EOF
+/* This file is part of GLD, the Gnu Linker.
+ Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005 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 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. */
+#ifdef TARGET_IS_arm_epoc_pe
+#define bfd_arm_pe_allocate_interworking_sections \
+ bfd_arm_epoc_pe_allocate_interworking_sections
+#define bfd_arm_pe_get_bfd_for_interworking \
+ bfd_arm_epoc_pe_get_bfd_for_interworking
+#define bfd_arm_pe_process_before_allocation \
+ bfd_arm_epoc_pe_process_before_allocation
+#endif
+
+#include "bfd.h"
+#include "sysdep.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)
+#define DLL_SUPPORT
+#endif
+#if defined(TARGET_IS_shpe) || defined(TARGET_IS_mipspe) || defined(TARGET_IS_armpe)
+#define DLL_SUPPORT
+#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
+#ifdef TARGET_IS_armpe
+#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 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;
+
+#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 void
+gld_${EMULATION_NAME}_before_parse (void)
+{
+ 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 = -1;
+
+#if (PE_DEF_SUBSYSTEM == 9) || (PE_DEF_SUBSYSTEM == 2)
+#if defined TARGET_IS_mipspe || defined TARGET_IS_armpe
+ lang_default_entry ("WinMainCRTStartup");
+#else
+ lang_default_entry ("_WinMainCRTStartup");
+#endif
+#else
+ lang_default_entry ("${ENTRY}");
+#endif
+#endif
+}
+
+/* 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_KILL_ATS (OPTION_EXCLUDE_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)
+
+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},
+#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-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
+ {"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},
+#endif
+ {"large-address-aware", no_argument, NULL, OPTION_LARGE_ADDRESS_AWARE},
+ {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__", NT_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),
+#ifdef TARGET_IS_armpe
+ D(MajorSubsystemVersion,"__major_subsystem_version__", 2),
+#else
+ D(MajorSubsystemVersion,"__major_subsystem_version__", 4),
+#endif
+ D(MinorSubsystemVersion,"__minor_subsystem_version__", 0),
+ D(Subsystem,"__subsystem__", ${SUBSYSTEM}),
+ D(SizeOfStackReserve,"__size_of_stack_reserve__", 0x200000),
+ 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
+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, _(" --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-libs lib,lib,... Exclude libraries from automatic export\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"));
+}
+
+
+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;
+ const char *entry;
+ const char *initial_symbol_char;
+ char *end;
+ int len;
+ int i;
+ int subsystem;
+ unsigned long temp_subsystem;
+ static const struct
+ {
+ const char *name;
+ const int value;
+ const char *entry;
+ }
+ v[] =
+ {
+ { "native", 1, "NtProcessStartup" },
+ { "windows", 2, "WinMainCRTStartup" },
+ { "console", 3, "mainCRTStartup" },
+ { "posix", 7, "__PosixProcessStartup"},
+ { "wince", 9, "_WinMainCRTStartup" },
+ { "xbox", 14, "mainCRTStartup" },
+ { NULL, 0, NULL }
+ };
+ /* Entry point name for arbitrary subsystem numbers. */
+ static const char default_entry[] = "mainCRTStartup";
+
+ /* 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;
+
+ /* If no match, use the default. */
+ if (v[i].name != NULL)
+ entry = v[i].entry;
+ else
+ entry = default_entry;
+
+ /* Use this subsystem. */
+ 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;
+ }
+
+ entry = v[i].entry;
+ subsystem = v[i].value;
+ }
+
+ set_pe_name ("__subsystem__", subsystem);
+
+ initial_symbol_char = ${INITIAL_SYMBOL_CHAR};
+ 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);
+
+ 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;
+#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, 0);
+ break;
+ case OPTION_EXCLUDE_LIBS:
+ pe_dll_add_excludes (optarg, 1);
+ 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 = 1;
+ 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;
+ }
+ 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;
+ lang_statement_list_type *save;
+
+ 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;
+ }
+
+ /* Don't do any symbol assignments if this is a relocatable link. */
+ if (link_info.relocatable)
+ return;
+
+ /* Glue the assignments into the abs section. */
+ save = stat_ptr;
+
+ 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 ('=', 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 ();
+ if (j == IMAGEBASEOFF)
+ image_base_statement = rv;
+ }
+ /* Restore the pointer. */
+ stat_ptr = save;
+
+ 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)
+{
+ /* The Windows libraries are designed for the linker to treat the
+ entry point as an undefined symbol. Otherwise, the .obj that
+ defines mainCRTStartup is brought in because it is the first
+ encountered in libc.lib and it has other symbols in it which will
+ be pulled in by the link process. To avoid this, we act as
+ though the user specified -u with the entry point symbol.
+
+ This function is called after the linker script and command line
+ options have been read, so at this point we know the right entry
+ point. This function is called before the input files are
+ opened, so registering the symbol as undefined will make a
+ difference. */
+
+ if (! link_info.relocatable && entry_symbol.name != NULL)
+ ldlang_add_undef (entry_symbol.name);
+}
+
+/* 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;
+
+ sl = strlen (string);
+ if (h->type == bfd_link_hash_defined
+ && strncmp (h->root.string, 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 == '@');
+ /* For now, don't try to fixup fastcall symbols. */
+
+ 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 /* + lead_at */);
+ at = strchr (cname, '@');
+ *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,
+ (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, symsize, i;
+
+ if (link_info.pei386_auto_import == -1)
+ info_msg (_("Info: resolving %s by linking to %s (auto-import)\n"),
+ undef->root.string, buf);
+
+ symsize = bfd_get_symtab_upper_bound (b);
+ symbols = (asymbol **) xmalloc (symsize);
+ nsyms = bfd_canonicalize_symtab (b, symbols);
+
+ for (i = 0; i < nsyms; i++)
+ {
+ if (memcmp (symbols[i]->name, "__head_",
+ sizeof ("__head_") - 1))
+ continue;
+
+ if (pe_dll_extra_pe_debug)
+ printf ("->%s\n", symbols[i]->name);
+
+ pe_data_import_dll = (char*) (symbols[i]->name +
+ sizeof ("__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
+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 (output_bfd) == NULL || coff_data (output_bfd)->pe == 0)
+ einfo (_("%F%P: PE operations on non PE file.\n"));
+
+ pe_data (output_bfd)->pe_opthdr = pe;
+ pe_data (output_bfd)->dll = init[DLLOFF].value;
+ pe_data (output_bfd)->real_flags |= real_flags;
+
+#ifdef DLL_SUPPORT
+ if (pe_enable_stdcall_fixup) /* -1=warn or 1=disable */
+ pe_fixup_stdcalls ();
+
+ pe_process_import_defs (output_bfd, & link_info);
+
+ pe_find_data_imports ();
+
+#if ! (defined (TARGET_IS_i386pe) || defined (TARGET_IS_armpe))
+ if (link_info.shared)
+#else
+ if (!link_info.relocatable)
+#endif
+ pe_dll_build_sections (output_bfd, &link_info);
+
+#ifndef TARGET_IS_i386pe
+#ifndef TARGET_IS_armpe
+ else
+ pe_exe_build_sections (output_bfd, &link_info);
+#endif
+#endif
+#endif
+
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_pe)
+ if (strstr (bfd_get_target (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_pe_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 (strncmp (sec->name, ".idata\$", 7) == 0)
+ 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 symsize;
+ long relsize;
+ asymbol **symbols;
+ arelent **relocs;
+ int nrelocs;
+
+ symsize = bfd_get_symtab_upper_bound (is->the_bfd);
+ if (symsize < 1)
+ break;
+ relsize = bfd_get_reloc_upper_bound (is->the_bfd, sec);
+ if (relsize < 1)
+ break;
+
+ symbols = (asymbol **) xmalloc (symsize);
+ symsize = bfd_canonicalize_symtab (is->the_bfd, symbols);
+ if (symsize < 0)
+ {
+ einfo ("%X%P: unable to process symbols: %E");
+ return;
+ }
+
+ relocs = (arelent **) 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");
+ 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)
+{
+#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)
+ /* 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_pe_process_before_allocation
+ (is->the_bfd, & link_info, support_old_code))
+ {
+ /* xgettext:c-format */
+ einfo (_("Errors encountered processing file %s for interworking"),
+ is->filename);
+ }
+ }
+ }
+
+ /* We have seen it all. Allocate it, and carry on. */
+ bfd_arm_pe_allocate_interworking_sections (& link_info);
+#endif /* TARGET_IS_armpe */
+
+ 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 (init[i].symbol, 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 = (char *) xmalloc (buflen);
+
+ for (i = 0; i < pe_def_file->num_exports; i++)
+ {
+ struct bfd_link_hash_entry *h;
+
+ sprintf (buf, "_%s", 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 (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
+ if (bfd_get_format (entry->the_bfd) == bfd_object)
+ {
+ char fbuf[LD_PATHMAX + 1];
+ const char *ext;
+
+ if (REALPATH (entry->filename, fbuf) == NULL)
+ strncpy (fbuf, entry->filename, sizeof (fbuf));
+
+ ext = fbuf + strlen (fbuf) - 4;
+
+ if (strcmp (ext, ".dll") == 0 || strcmp (ext, ".DLL") == 0)
+ return pe_implied_import_dll (fbuf);
+ }
+#endif
+ return FALSE;
+}
+
+static void
+gld_${EMULATION_NAME}_finish (void)
+{
+#if defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_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 (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: connot find thumb start symbol %s\n"), thumb_entry_symbol);
+ }
+#endif /* defined(TARGET_IS_armpe) || defined(TARGET_IS_arm_epoc_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 (output_bfd, &link_info);
+ if (pe_implib_filename)
+ pe_dll_generate_implib (pe_def_file, pe_implib_filename);
+ }
+#if defined(TARGET_IS_shpe) || defined(TARGET_IS_mipspe)
+ /* ARM doesn't need relocs. */
+ else
+ {
+ pe_exe_fill_sections (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 (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 bfd_boolean
+gld_${EMULATION_NAME}_place_orphan (asection *s)
+{
+ const char *secname;
+ const char *orig_secname;
+ char *dollar = NULL;
+ lang_output_section_statement_type *os;
+ lang_statement_list_type add_child;
+
+ secname = bfd_get_section_name (s->owner, s);
+
+ /* Look through the script to see where to place this section. */
+ orig_secname = secname;
+ if (!link_info.relocatable
+ && (dollar = strchr (secname, '$')) != NULL)
+ {
+ size_t len = dollar - orig_secname;
+ char *newname = xmalloc (len + 1);
+ memcpy (newname, orig_secname, len);
+ newname[len] = '\0';
+ secname = newname;
+ }
+
+ os = lang_output_section_find (secname);
+
+ lang_list_init (&add_child);
+
+ if (os != NULL
+ && (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, if any, 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);
+ }
+ else
+ {
+ static struct orphan_save hold[] =
+ {
+ { ".text",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE,
+ 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_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 = &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);
+ }
+
+ /* Choose a unique name for the section. This will be needed if the
+ same section name appears in the input file with different
+ loadable or allocatable characteristics. */
+ if (bfd_get_section_by_name (output_bfd, secname) != NULL)
+ {
+ static int count = 1;
+ secname = bfd_get_unique_section_name (output_bfd, secname, &count);
+ if (secname == NULL)
+ einfo ("%F%P: place_orphan failed: %E\n");
+ }
+
+ /* 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, after, place, address, &add_child);
+ }
+
+ {
+ lang_statement_union_type **pl = &os->children.head;
+
+ if (dollar != NULL)
+ {
+ bfd_boolean found_dollar;
+
+ /* The section name has a '$'. Sort it with the other '$'
+ sections. */
+ found_dollar = FALSE;
+ for ( ; *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)
+ {
+ if (found_dollar)
+ break;
+ }
+ else
+ {
+ found_dollar = TRUE;
+ if (strcmp (orig_secname, lname) < 0)
+ break;
+ }
+ }
+ }
+
+ if (add_child.head != NULL)
+ {
+ add_child.head->header.next = *pl;
+ *pl = add_child.head;
+ }
+ }
+
+ return TRUE;
+}
+
+static bfd_boolean
+gld_${EMULATION_NAME}_open_dynamic_archive
+ (const char *arch ATTRIBUTE_UNUSED, search_dirs_type *search,
+ lang_input_statement_type *entry)
+{
+ const char * filename;
+ char * string;
+
+ if (! entry->is_archive)
+ return FALSE;
+
+ filename = entry->filename;
+
+ string = (char *) xmalloc (strlen (search->name)
+ + strlen (filename)
+ + sizeof "/lib.a.dll"
+#ifdef DLL_SUPPORT
+ + (pe_dll_search_prefix ? strlen (pe_dll_search_prefix) : 0)
+#endif
+ + 1);
+
+ /* Try "libfoo.dll.a" first (preferred explicit import library for dll's. */
+ sprintf (string, "%s/lib%s.dll.a", search->name, filename);
+
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ /* Try "foo.dll.a" next (alternate explicit import library for dll's. */
+ sprintf (string, "%s/%s.dll.a", search->name, filename);
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ /* Try libfoo.a next. Normally, this would be interpreted as a static
+ library, but it *could* be an import library. For backwards compatibility,
+ libfoo.a needs to ==precede== libfoo.dll and foo.dll in the search,
+ or sometimes errors occur when building legacy packages.
+
+ Putting libfoo.a here means that in a failure case (i.e. the library
+ -lfoo is not found) we will search for libfoo.a twice before
+ giving up -- once here, and once when searching for a "static" lib.
+ for a "static" lib. */
+ /* Try "libfoo.a" (import lib, or static lib, but must
+ take precedence over dll's). */
+ sprintf (string, "%s/lib%s.a", search->name, filename);
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+#ifdef DLL_SUPPORT
+ if (pe_dll_search_prefix)
+ {
+ /* Try "<prefix>foo.dll" (preferred dll name, if specified). */
+ sprintf (string, "%s/%s%s.dll", search->name, pe_dll_search_prefix, filename);
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ /* Try "libfoo.dll" (default preferred dll name). */
+ sprintf (string, "%s/lib%s.dll", search->name, filename);
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ /* Finally, try "foo.dll" (alternate dll name). */
+ sprintf (string, "%s/%s.dll", search->name, filename);
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ free (string);
+ return FALSE;
+ }
+ }
+ }
+ }
+ else /* pe_dll_search_prefix not specified. */
+#endif
+ {
+ /* Try "libfoo.dll" (preferred dll name). */
+ sprintf (string, "%s/lib%s.dll", search->name, filename);
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ /* Finally, try "foo.dll" (alternate dll name). */
+ sprintf (string, "%s/%s.dll", search->name, 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, "", ".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"
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/ppc32elf.em b/binutils-2.17/ld/emultempl/ppc32elf.em
new file mode 100644
index 00000000..10f91074
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/ppc32elf.em
@@ -0,0 +1,174 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra powerpc32-elf
+# specific routines.
+#
+cat >>e${EMULATION_NAME}.c <<EOF
+
+#include "libbfd.h"
+#include "elf32-ppc.h"
+
+extern const bfd_target bfd_elf32_powerpc_vec;
+extern const bfd_target bfd_elf32_powerpcle_vec;
+extern const bfd_target bfd_elf32_powerpc_vxworks_vec;
+
+static inline int
+is_ppc_elf32_vec(const bfd_target * vec)
+{
+ return (vec == &bfd_elf32_powerpc_vec
+ || vec == &bfd_elf32_powerpc_vxworks_vec
+ || vec == &bfd_elf32_powerpcle_vec);
+}
+
+/* Whether to run tls optimization. */
+static int notlsopt = 0;
+
+/* Whether to emit symbols for stubs. */
+static int emit_stub_syms = 0;
+
+/* Chooses the correct place for .plt and .got. */
+static int old_plt = 0;
+static int old_got = 0;
+
+static void
+ppc_after_open (void)
+{
+ if (is_ppc_elf32_vec (link_info.hash->creator))
+ {
+ 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];
+
+ emit_stub_syms |= link_info.emitrelocations;
+ new_plt = ppc_elf_select_plt_layout (output_bfd, &link_info, old_plt,
+ 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_elf32_vec (link_info.hash->creator))
+ {
+ if (ppc_elf_tls_setup (output_bfd, &link_info) && !notlsopt)
+ {
+ if (!ppc_elf_tls_optimize (output_bfd, &link_info))
+ {
+ einfo ("%X%P: TLS problem %E\n");
+ return;
+ }
+ }
+ }
+ gld${EMULATION_NAME}_before_allocation ();
+}
+
+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_TLS_OPT 301
+#define OPTION_OLD_PLT 302
+#define OPTION_OLD_GOT 303
+#define OPTION_STUBSYMS 304
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "emit-stub-syms", no_argument, NULL, OPTION_STUBSYMS },
+ { "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT },
+ { "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-tls-optimize Don'\''t try to optimize TLS accesses.\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_TLS_OPT:
+ notlsopt = 1;
+ break;
+
+ case OPTION_OLD_PLT:
+ old_plt = 1;
+ 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.17/ld/emultempl/ppc64elf.em b/binutils-2.17/ld/emultempl/ppc64elf.em
new file mode 100644
index 00000000..ea337712
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/ppc64elf.em
@@ -0,0 +1,579 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra powerpc64-elf
+# specific routines.
+#
+cat >>e${EMULATION_NAME}.c <<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;
+
+/* 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 emit symbols for stubs. */
+static int emit_stub_syms = 0;
+
+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)
+{
+ extern const bfd_target bfd_elf64_powerpc_vec;
+ extern const bfd_target bfd_elf64_powerpcle_vec;
+
+ if (link_info.hash->creator != &bfd_elf64_powerpc_vec
+ && link_info.hash->creator != &bfd_elf64_powerpcle_vec)
+ 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", output_bfd);
+ if (stub_file->the_bfd == NULL
+ || !bfd_set_arch_mach (stub_file->the_bfd,
+ bfd_get_arch (output_bfd),
+ bfd_get_mach (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);
+}
+
+static void
+ppc_before_allocation (void)
+{
+ if (stub_file != NULL)
+ {
+ if (!ppc64_elf_edit_opd (output_bfd, &link_info, no_opd_opt,
+ non_overlapping_opd))
+ einfo ("%X%P: can not edit %s %E\n", "opd");
+
+ if (ppc64_elf_tls_setup (output_bfd, &link_info) && !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. */
+ expld.phase = lang_mark_phase_enum;
+ expld.dataseg.phase = exp_dataseg_none;
+ one_lang_size_sections_pass (NULL, TRUE);
+
+ if (!ppc64_elf_tls_optimize (output_bfd, &link_info))
+ einfo ("%X%P: TLS problem %E\n");
+
+ /* We must not cache anything from the preliminary sizing. */
+ lang_reset_memory_regions ();
+ }
+
+ if (!no_toc_opt
+ && !link_info.relocatable
+ && !ppc64_elf_edit_toc (output_bfd, &link_info))
+ einfo ("%X%P: can not edit %s %E\n", "toc");
+ }
+
+ 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;
+
+ stub_sec = bfd_make_section_anyway (stub_file->the_bfd, stub_sec_name);
+ if (stub_sec == NULL)
+ goto err_ret;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE
+ | SEC_HAS_CONTENTS | SEC_RELOC | SEC_IN_MEMORY | SEC_KEEP);
+ if (!bfd_set_section_flags (stub_file->the_bfd, stub_sec, flags))
+ 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. */
+ need_laying_out = 0;
+
+ gld${EMULATION_NAME}_layout_sections_again ();
+}
+
+
+/* Call the back-end function to set TOC base after we have placed all
+ the sections. */
+static void
+gld${EMULATION_NAME}_after_allocation (void)
+{
+ if (!link_info.relocatable)
+ _bfd_set_gp_value (output_bfd, ppc64_elf_toc (output_bfd));
+}
+
+
+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)
+ ppc64_elf_next_toc_section (&link_info, i);
+ }
+}
+
+
+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 == output_bfd)
+ {
+ if (!ppc64_elf_next_input_section (&link_info, i))
+ einfo ("%X%P: can not size stub section: %E\n");
+ }
+ }
+}
+
+
+/* Final emulation specific call. */
+
+static void
+ppc_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";
+
+ /* bfd_elf_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 (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 (output_bfd, &link_info,
+ no_multi_toc);
+ if (ret < 0)
+ einfo ("%X%P: can not size stub section: %E\n");
+ else if (ret > 0)
+ {
+ toc_section = bfd_get_section_by_name (output_bfd, ".got");
+ if (toc_section != NULL)
+ lang_for_each_statement (build_toc_list);
+
+ ppc64_elf_reinit_toc (output_bfd, &link_info);
+
+ lang_for_each_statement (build_section_lists);
+
+ /* Call into the BFD backend to do the real work. */
+ if (!ppc64_elf_size_stubs (output_bfd,
+ &link_info,
+ group_size,
+ &ppc_add_stub_section,
+ &ppc_layout_sections_again))
+ einfo ("%X%P: can not size stub section: %E\n");
+ }
+ }
+
+ if (need_laying_out)
+ ppc_layout_sections_again ();
+
+ if (link_info.relocatable)
+ {
+ asection *toc = bfd_get_section_by_name (output_bfd, ".toc");
+ if (toc != NULL
+ && bfd_section_size (output_bfd, toc) > 0x10000)
+ einfo ("%X%P: TOC section size exceeds 64k\n");
+ }
+
+ if (stub_added)
+ {
+ char *msg = NULL;
+ char *line, *endline;
+
+ emit_stub_syms |= link_info.emitrelocations;
+ 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->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;
+ if (entry->symbol != NULL)
+ {
+ len = strlen (entry->symbol) + 2;
+ dot_pat = xmalloc (len);
+ dot_pat[0] = '.';
+ memcpy (dot_pat + 1, entry->symbol, len - 1);
+ dot_entry->symbol = dot_pat;
+ }
+ 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
+
+# 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_DOTSYMS (OPTION_STUBSYMS + 1)
+#define OPTION_NO_DOTSYMS (OPTION_DOTSYMS + 1)
+#define OPTION_NO_TLS_OPT (OPTION_NO_DOTSYMS + 1)
+#define OPTION_NO_OPD_OPT (OPTION_NO_TLS_OPT + 1)
+#define OPTION_NO_TOC_OPT (OPTION_NO_OPD_OPT + 1)
+#define OPTION_NO_MULTI_TOC (OPTION_NO_TOC_OPT + 1)
+#define OPTION_NON_OVERLAPPING_OPD (OPTION_NO_MULTI_TOC + 1)
+'
+
+PARSE_AND_LIST_LONGOPTS='
+ { "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE },
+ { "emit-stub-syms", no_argument, NULL, OPTION_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-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 },
+ { "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 can be\n\
+ handled by one stub section. A negative value\n\
+ locates all stubs before 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, _("\
+ --emit-stub-syms Label linker stubs with a symbol.\n"
+ ));
+ fprintf (file, _("\
+ --dotsyms For every version pattern \"foo\" in a version script,\n\
+ add \".foo\" so that function code symbols are\n\
+ treated the same as function descriptor symbols.\n\
+ 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-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, _("\
+ --non-overlapping-opd Canonicalize .opd, so that there are no overlapping\n\
+ .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_DOTSYMS:
+ dotsyms = 1;
+ break;
+
+ case OPTION_NO_DOTSYMS:
+ dotsyms = 0;
+ break;
+
+ case OPTION_NO_TLS_OPT:
+ no_tls_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_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=ppc_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.17/ld/emultempl/sh64elf.em b/binutils-2.17/ld/emultempl/sh64elf.em
new file mode 100644
index 00000000..830960f1
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/sh64elf.em
@@ -0,0 +1,561 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra sh64
+# specific routines.
+#
+
+LDEMUL_AFTER_ALLOCATION=sh64_elf_${EMULATION_NAME}_after_allocation
+LDEMUL_BEFORE_ALLOCATION=sh64_elf_${EMULATION_NAME}_before_allocation
+
+cat >>e${EMULATION_NAME}.c <<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 (output_bfd, SH64_CRANGES_SECTION_NAME);
+
+ if (cranges != NULL)
+ {
+ if (command_line.relax)
+ {
+ /* 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);
+ }
+ }
+
+ command_line.relax = FALSE;
+ }
+
+ /* 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 (command_line.relax)
+ {
+ 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);
+ command_line.relax = FALSE;
+ 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 = 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 (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 (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 (output_bfd,
+ SH64_CRANGES_SECTION_NAME);
+ if (cranges == NULL
+ || !bfd_set_section_flags (output_bfd,
+ cranges,
+ SEC_LINKER_CREATED
+ | SEC_KEEP
+ | SEC_HAS_CONTENTS
+ | SEC_DEBUGGING))
+ 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
+ = bfd_get_section_by_name (output_bfd, SH64_CRANGES_SECTION_NAME);
+
+ /* If this ever starts doing something, we will pick it up. */
+ after_allocation_default ();
+
+ /* 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 = 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 (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++;
+ }
+ }
+ }
+ }
+
+ /* ldemul_after_allocation may be called twice. First directly from
+ lang_process, and the second time when lang_process calls ldemul_finish,
+ which calls gld${EMULATION_NAME}_finish, e.g. gldshelf32_finish, which
+ is defined in emultempl/elf32.em and calls ldemul_after_allocation,
+ if bfd_elf_discard_info returned true. */
+ 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 = 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 (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 (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 (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 (output_bfd, isec->output_offset,
+ crangesp + SH64_CRANGE_CR_ADDR_OFFSET);
+ cr_addr_order->u.reloc.p->addend = 0;
+ }
+ else
+ bfd_put_32 (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 (output_bfd, cr_size,
+ crangesp + SH64_CRANGE_CR_SIZE_OFFSET);
+
+ bfd_put_16 (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;
+}
diff --git a/binutils-2.17/ld/emultempl/sunos.em b/binutils-2.17/ld/emultempl/sunos.em
new file mode 100644
index 00000000..a480558c
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/sunos.em
@@ -0,0 +1,1033 @@
+# 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
+cat >e${EMULATION_NAME}.c <<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 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 GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define TARGET_IS_${EMULATION_NAME}
+
+#include "bfd.h"
+#include "sysdep.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} "*)
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<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 (strncmp (inp->local_sym_name, "-l", 2) == 0);
+
+ 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 (strncmp (entry->d_name, "lib", 3) != 0
+ || 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 (strncmp (entry->d_name + 3 + len, ".so", 3) != 0)
+ 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 (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 (strncmp (lname, "-l", 2) != 0)
+ {
+ bfd *abfd;
+
+ abfd = bfd_openr (lname, bfd_get_target (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} "*)
+cat >>e${EMULATION_NAME}.c <<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
+cat >>e${EMULATION_NAME}.c <<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 (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 (strncmp (global_needed->name, "-l", 2) != 0)
+ {
+ 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 (strncmp (sname, "lib", 3) != 0)
+ 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");
+ 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 (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 (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 (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 (output_bfd, need_pnames - need_contents, need_pinfo);
+ if (! inp->is_archive)
+ {
+ bfd_put_32 (output_bfd, (bfd_vma) 0, need_pinfo + 4);
+ bfd_put_16 (output_bfd, (bfd_vma) 0, need_pinfo + 8);
+ bfd_put_16 (output_bfd, (bfd_vma) 0, need_pinfo + 10);
+ strcpy ((char *) need_pnames, inp->filename);
+ }
+ else
+ {
+ char *verstr;
+ int maj, min;
+
+ bfd_put_32 (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 (output_bfd, (bfd_vma) maj, need_pinfo + 8);
+ bfd_put_16 (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 (output_bfd, (bfd_vma) 0, need_pinfo + 12);
+ else
+ bfd_put_32 (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"
+
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/ticoff.em b/binutils-2.17/ld/emultempl/ticoff.em
new file mode 100644
index 00000000..0382bbdd
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/ticoff.em
@@ -0,0 +1,182 @@
+# 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 ;-)
+cat >>e${EMULATION_NAME}.c <<EOF
+/* This file is part of GLD, the Gnu Linker.
+ Copyright 1999, 2000, 2002, 2003, 2004 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 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 "bfd.h"
+#include "sysdep.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"/
+'
+cat >>e${EMULATION_NAME}.c <<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.
+
+cat >>e${EMULATION_NAME}.c <<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
+
+cat >>e${EMULATION_NAME}.c <<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.17/ld/emultempl/vanilla.em b/binutils-2.17/ld/emultempl/vanilla.em
new file mode 100644
index 00000000..21248526
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/vanilla.em
@@ -0,0 +1,85 @@
+# This shell script emits a C file. -*- C -*-
+# It does some substitutions.
+cat >e${EMULATION_NAME}.c <<EOF
+/* A vanilla emulation with no defaults
+ Copyright 1991, 1992, 1994, 2000, 2001, 2002, 2003
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+This file is part of GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "bfd.h"
+#include "sysdep.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(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.17/ld/emultempl/vxworks.em b/binutils-2.17/ld/emultempl/vxworks.em
new file mode 100644
index 00000000..eafbb58d
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/vxworks.em
@@ -0,0 +1,49 @@
+if test -n "$VXWORKS_BASE_EM_FILE" ; then
+. "${srcdir}/emultempl/${VXWORKS_BASE_EM_FILE}.em"
+fi
+
+cat >>e${EMULATION_NAME}.c <<EOF
+
+static int force_dynamic;
+
+static void
+vxworks_after_open (void)
+{
+ ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open} ();
+
+ if (force_dynamic
+ && link_info.input_bfds
+ && !_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
+ && 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;
+'
+
+LDEMUL_AFTER_OPEN=vxworks_after_open
diff --git a/binutils-2.17/ld/emultempl/xtensaelf.em b/binutils-2.17/ld/emultempl/xtensaelf.em
new file mode 100644
index 00000000..f5d2ba9c
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/xtensaelf.em
@@ -0,0 +1,1864 @@
+# This shell script emits a C file. -*- C -*-
+# Copyright 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is part of GLD, the Gnu Linker.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra xtensa-elf
+# specific routines.
+#
+cat >>e${EMULATION_NAME}.c <<EOF
+
+#include <xtensa-config.h>
+#include "../bfd/elf-bfd.h"
+#include "../bfd/libbfd.h"
+#include "elf/xtensa.h"
+#include "bfd.h"
+
+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 *);
+
+
+/* Flag for the emulation-specific "--no-relax" option. */
+static bfd_boolean disable_relaxation = FALSE;
+
+/* 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 *symtab_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 and relocation section for it. */
+ prop_sec_name = strdup (prop_sec_name);
+ prop_sec = bfd_make_section (abfd, prop_sec_name);
+ if (prop_sec == NULL
+ || ! bfd_set_section_flags (abfd, prop_sec,
+ bfd_get_section_flags (abfd, insn_sec))
+ || ! bfd_set_section_alignment (abfd, prop_sec, 2))
+ {
+ *error_message = _("could not create new section");
+ goto cleanup;
+ }
+
+ if (! bfd_set_section_flags (abfd, prop_sec,
+ bfd_get_section_flags (abfd, insn_sec))
+ || ! bfd_set_section_alignment (abfd, prop_sec, 2))
+ {
+ *error_message = _("could not set new section properties");
+ 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. */
+ elf_section_data (prop_sec)->rel_hdr.sh_entsize =
+ sizeof (Elf32_External_Rela);
+ elf_section_data (prop_sec)->rel_hdr.sh_size =
+ elf_section_data (insn_sec)->rel_hdr.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_INSN_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;
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+
+ 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 (strncmp (sec_name, LINKONCE_SEC_OLD_TEXT_BASE_NAME,
+ strlen (LINKONCE_SEC_OLD_TEXT_BASE_NAME)) == 0)
+ {
+ 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)
+{
+ bfd *abfd;
+
+ /* First call the ELF version. */
+ gld${EMULATION_NAME}_after_open ();
+
+ /* Now search the input files looking for instruction table sections. */
+ for (abfd = link_info.input_bfds;
+ abfd != NULL;
+ abfd = abfd->link_next)
+ {
+ asection *sec = abfd->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 (abfd, sec);
+ sec = next_sec;
+ }
+ }
+}
+
+
+/* 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)
+{
+ bfd *in_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 && output_bfd->xvec->byteorder == BFD_ENDIAN_LITTLE)
+ {
+ einfo (_("%F%P: little endian output does not match "
+ "Xtensa configuration\n"));
+ }
+ if (!is_big_endian && output_bfd->xvec->byteorder == BFD_ENDIAN_BIG)
+ {
+ einfo (_("%F%P: big endian output does not match "
+ "Xtensa configuration\n"));
+ }
+
+ /* 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. */
+
+ for (in_bfd = link_info.input_bfds;
+ in_bfd != NULL;
+ in_bfd = in_bfd->link_next)
+ {
+ if ((is_big_endian && in_bfd->xvec->byteorder == BFD_ENDIAN_LITTLE)
+ || (!is_big_endian && in_bfd->xvec->byteorder == BFD_ENDIAN_BIG))
+ einfo (_("%F%P: cross-endian linking not supported\n"));
+ }
+
+ /* 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 (!disable_relaxation)
+ command_line.relax = TRUE;
+
+ xtensa_strip_inconsistent_linkonce_sections (stat_ptr);
+
+ gld${EMULATION_NAME}_before_allocation ();
+
+ xtensa_wild_group_interleave (stat_ptr->head);
+ if (command_line.relax)
+ 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;
+
+/* Begin verbatim code from ldlang.c:
+ the following are copied from ldlang.c because they are defined
+ there statically. */
+
+static void
+lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
+ lang_statement_union_type *s)
+{
+ for (; s != (lang_statement_union_type *) 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:
+ 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:
+ break;
+ default:
+ FAIL ();
+ break;
+ }
+ }
+}
+
+/* End of verbatim code from ldlang.c. */
+
+
+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 literal sections or property 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);
+ char *prop_tag = 0;
+
+ 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. */
+ if (strncmp (sec_name + linkonce_len, "p.", 2) == 0)
+ prop_tag = "p.";
+ else if (strncmp (sec_name + linkonce_len, "prop.", 5) == 0)
+ prop_tag = "prop.";
+ if (prop_tag)
+ {
+ int tag_len = strlen (prop_tag);
+ char *dep_sec_name = xmalloc (strlen (sec_name));
+ 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.");
+ strcat (dep_sec_name, sec_name + linkonce_len + tag_len);
+ 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_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)
+{
+ lang_output_section_statement_type *os;
+ 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;
+
+ os = &statement->output_section_statement;
+
+#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;
+ lang_statement_list_type *old_stat_ptr = stat_ptr;
+
+ /* 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. */
+
+ tmplist.head = NULL;
+ tmplist.tail = &tmplist.head;
+
+ 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;
+ stat_ptr = old_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_NO_RELAX (OPTION_OPT_SIZEOPT + 1)
+#define OPTION_LITERAL_MOVEMENT (OPTION_NO_RELAX + 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},
+ { "no-relax", no_argument, NULL, OPTION_NO_RELAX},
+ { "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\t\tWhen relaxing longcalls, prefer size optimization\n\t\t\t over branch target alignment\n"));
+ fprintf (file, _(" --no-relax\t\tDo not relax branches or coalesce literals\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+ case OPTION_OPT_SIZEOPT:
+ elf32xtensa_size_opt = 1;
+ break;
+ case OPTION_NO_RELAX:
+ disable_relaxation = TRUE;
+ 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.17/ld/emultempl/z80.em b/binutils-2.17/ld/emultempl/z80.em
new file mode 100644
index 00000000..d36c9435
--- /dev/null
+++ b/binutils-2.17/ld/emultempl/z80.em
@@ -0,0 +1,85 @@
+# This shell script emits C code -*- C -*-
+# to keep track of the machine type of Z80 object files
+# It does some substitutions.
+
+LDEMUL_BEFORE_PARSE=gldz80_before_parse
+LDEMUL_RECOGNIZED_FILE=gldz80_recognized_file
+LDEMUL_AFTER_OPEN=gldz80_after_open
+
+cat >>e${EMULATION_NAME}.c <<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 (output_bfd, bfd_arch_z80, mach_type);
+}
+/* --- \end{z80.em} */
+EOF
diff --git a/binutils-2.17/ld/fdl.texi b/binutils-2.17/ld/fdl.texi
new file mode 100644
index 00000000..cc3cd011
--- /dev/null
+++ b/binutils-2.17/ld/fdl.texi
@@ -0,0 +1,367 @@
+@c -*-texinfo-*-
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+@center Version 1.1, March 2000
+
+@display
+Copyright (C) 2000, 2003 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+@sp 1
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document ``free'' in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially. Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@sp 1
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License. The ``Document'', below, refers to any
+such manual or work. Any member of the public is a licensee, and is
+addressed as ``you.''
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent. A copy that is
+not ``Transparent'' is called ``Opaque.''
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification. Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+@sp 1
+@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.
+@sp 1
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols. If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+@sp 1
+@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:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.@*
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).@*
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.@*
+D. Preserve all the copyright notices of the Document.@*
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.@*
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.@*
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.@*
+H. Include an unaltered copy of this License.@*
+I. Preserve the section entitled ``History'', and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section entitled ``History'' in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.@*
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the ``History'' section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.@*
+K. In any section entitled ``Acknowledgements'' or ``Dedications'',
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.@*
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.@*
+M. Delete any section entitled ``Endorsements.'' Such a section
+ may not be included in the Modified Version.@*
+N. Do not retitle any existing section as ``Endorsements''
+ or to conflict in title with any Invariant Section.@*
+@sp 1
+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.
+@sp 1
+@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.
+
+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.''
+@sp 1
+@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.
+@sp 1
+@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, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation. Such a compilation is called an ``aggregate'', and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+@sp 1
+@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 provided that you also include the
+original English version of this License. In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+@sp 1
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+@sp 1
+@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
+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.
+
+@end enumerate
+
+@unnumberedsec 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.1
+or any later version published by the Free Software Foundation;
+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}.
+A copy of the license is included in the section entitled "GNU
+Free Documentation License."
+@end group
+@end smallexample
+
+If you have no Invariant Sections, write ``with no Invariant Sections''
+instead of saying which ones are invariant. If you have no
+Front-Cover Texts, write ``no Front-Cover Texts'' instead of
+``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/binutils-2.17/ld/gen-doc.texi b/binutils-2.17/ld/gen-doc.texi
new file mode 100644
index 00000000..800f64e2
--- /dev/null
+++ b/binutils-2.17/ld/gen-doc.texi
@@ -0,0 +1,22 @@
+@c ------------------------------ CONFIGURATION VARS:
+@c 1. Inclusiveness of this manual
+@set GENERIC
+
+@c 2. Specific target machines
+@set H8300
+@set I960
+@set ARM
+@set HPPA
+@set MMIX
+@set MSP430
+@set POWERPC
+@set POWERPC64
+@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.17/ld/genscripts.sh b/binutils-2.17/ld/genscripts.sh
new file mode 100755
index 00000000..e9d4f153
--- /dev/null
+++ b/binutils-2.17/ld/genscripts.sh
@@ -0,0 +1,371 @@
+#!/bin/sh
+# genscripts.sh - generate the ld-emulation-target specific files
+#
+# 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"]
+#
+# 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} ${EMULATION_NAME}
+
+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
+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
+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} ${EMULATION_NAME}
+ . ${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} ${EMULATION_NAME}
+ . ${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} ${EMULATION_NAME}
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.x
+
+LD_FLAG=n
+DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
+TEXT_START_ADDR=${NONPAGED_TEXT_START_ADDR-${TEXT_START_ADDR}}
+( echo "/* Script for -n: mix text and data on same page */"
+ . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME}
+ . ${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} ${EMULATION_NAME}
+ . ${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} ${EMULATION_NAME}
+ . ${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} ${EMULATION_NAME}
+ . ${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=" "
+ # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR.
+ (
+ echo "/* Script for ld --shared: link shared library */"
+ . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME}
+ . ${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} ${EMULATION_NAME}
+ . ${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} ${EMULATION_NAME}
+ . ${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=" "
+ # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR.
+ (
+ echo "/* Script for ld -pie: link position independent executable */"
+ . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME}
+ . ${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} ${EMULATION_NAME}
+ . ${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} ${EMULATION_NAME}
+ . ${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
+
+case " $EMULATION_LIBPATH " in
+ *" ${EMULATION_NAME} "*) COMPILE_IN=true;;
+esac
+
+# Generate e${EMULATION_NAME}.c.
+. ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em
diff --git a/binutils-2.17/ld/h8-doc.texi b/binutils-2.17/ld/h8-doc.texi
new file mode 100644
index 00000000..bbb1fd94
--- /dev/null
+++ b/binutils-2.17/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.17/ld/ld.1 b/binutils-2.17/ld/ld.1
new file mode 100644
index 00000000..26003aae
--- /dev/null
+++ b/binutils-2.17/ld/ld.1
@@ -0,0 +1,2071 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LD 1"
+.TH LD 1 "2006-06-23" "binutils-2.17" "GNU Development Tools"
+.SH "NAME"
+ld \- Using LD, the GNU linker
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+ld [\fBoptions\fR] \fIobjfile\fR ...
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBld\fR 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 \fBld\fR.
+.PP
+\&\fBld\fR accepts Linker Command Language files written in
+a superset of \s-1AT&T\s0's Link Editor Command Language syntax,
+to provide explicit and total control over the linking process.
+.PP
+This man page does not describe the command language; see the
+\&\fBld\fR entry in \f(CW\*(C`info\*(C'\fR, or the manual
+ld: the \s-1GNU\s0 linker, for full details on the command language and
+on other aspects of the \s-1GNU\s0 linker.
+.PP
+This version of \fBld\fR uses the general purpose \s-1BFD\s0 libraries
+to operate on object files. This allows \fBld\fR to read, combine, and
+write object files in many different formats\-\-\-for example, \s-1COFF\s0 or
+\&\f(CW\*(C`a.out\*(C'\fR. Different formats may be linked together to produce any
+available kind of object file.
+.PP
+Aside from its flexibility, the \s-1GNU\s0 linker is more helpful than other
+linkers in providing diagnostic information. Many linkers abandon
+execution immediately upon encountering an error; whenever possible,
+\&\fBld\fR continues executing, allowing you to identify other errors
+(or, in some cases, to get an output file in spite of the error).
+.PP
+The \s-1GNU\s0 linker \fBld\fR 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.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The linker supports a plethora of command-line options, but in actual
+practice few of them are used in any particular context.
+For instance, a frequent use of \fBld\fR is to link standard Unix
+object files on a standard, supported Unix system. On such a system, to
+link a file \f(CW\*(C`hello.o\*(C'\fR:
+.PP
+.Vb 1
+\& ld \-o <output> /lib/crt0.o hello.o \-lc
+.Ve
+.PP
+This tells \fBld\fR to produce a file called \fIoutput\fR as the
+result of linking the file \f(CW\*(C`/lib/crt0.o\*(C'\fR with \f(CW\*(C`hello.o\*(C'\fR and
+the library \f(CW\*(C`libc.a\*(C'\fR, which will come from the standard search
+directories. (See the discussion of the \fB\-l\fR option below.)
+.PP
+Some of the command-line options to \fBld\fR may be specified at any
+point in the command line. However, options which refer to files, such
+as \fB\-l\fR or \fB\-T\fR, 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.
+.PP
+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.
+.PP
+Usually the linker is invoked with at least one object file, but you can
+specify other forms of binary input files using \fB\-l\fR, \fB\-R\fR,
+and the script command language. If \fIno\fR binary input files at all
+are specified, the linker does not produce any output, and issues the
+message \fBNo input files\fR.
+.PP
+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 \fB\-T\fR). 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
+\&\f(CW\*(C`INPUT\*(C'\fR or \f(CW\*(C`GROUP\*(C'\fR to load other objects. Note that
+specifying a script in this way merely augments the main linker script;
+use the \fB\-T\fR option to replace the default linker script entirely.
+.PP
+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.
+.PP
+For options whose names are multiple letters, either one dash or two can
+precede the option name; for example, \fB\-trace\-symbol\fR and
+\&\fB\-\-trace\-symbol\fR are equivalent. Note\-\-\-there is one exception to
+this rule. Multiple letter options that start with a lower case 'o' can
+only be preceeded by two dashes. This is to reduce confusion with the
+\&\fB\-o\fR option. So for example \fB\-omagic\fR sets the output file
+name to \fBmagic\fR whereas \fB\-\-omagic\fR sets the \s-1NMAGIC\s0 flag on the
+output.
+.PP
+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,
+\&\fB\-\-trace\-symbol foo\fR and \fB\-\-trace\-symbol=foo\fR are equivalent.
+Unique abbreviations of the names of multiple-letter options are
+accepted.
+.PP
+Note\-\-\-if the linker is being invoked indirectly, via a compiler driver
+(e.g. \fBgcc\fR) then all the linker command line options should be
+prefixed by \fB\-Wl,\fR (or whatever is appropriate for the particular
+compiler driver) like this:
+.PP
+.Vb 1
+\& gcc \-Wl,\-\-startgroup foo.o bar.o \-Wl,\-\-endgroup
+.Ve
+.PP
+This is important, because otherwise the compiler driver program may
+silently drop the linker options, resulting in a bad link.
+.PP
+Here is a table of the generic command line switches accepted by the \s-1GNU\s0
+linker:
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR. The options read are
+inserted in place of the original @\fIfile\fR option. If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace. A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes. Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash. The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.IP "\fB\-a\fR\fIkeyword\fR" 4
+.IX Item "-akeyword"
+This option is supported for \s-1HP/UX\s0 compatibility. The \fIkeyword\fR
+argument must be one of the strings \fBarchive\fR, \fBshared\fR, or
+\&\fBdefault\fR. \fB\-aarchive\fR is functionally equivalent to
+\&\fB\-Bstatic\fR, and the other two keywords are functionally equivalent
+to \fB\-Bdynamic\fR. This option may be used any number of times.
+.IP "\fB\-A\fR\fIarchitecture\fR" 4
+.IX Item "-Aarchitecture"
+.PD 0
+.IP "\fB\-\-architecture=\fR\fIarchitecture\fR" 4
+.IX Item "--architecture=architecture"
+.PD
+In the current release of \fBld\fR, this option is useful only for the
+Intel 960 family of architectures. In that \fBld\fR configuration, the
+\&\fIarchitecture\fR argument identifies the particular architecture in
+the 960 family, enabling some safeguards and modifying the
+archive-library search path.
+.Sp
+Future releases of \fBld\fR may support similar functionality for
+other architecture families.
+.IP "\fB\-b\fR \fIinput-format\fR" 4
+.IX Item "-b input-format"
+.PD 0
+.IP "\fB\-\-format=\fR\fIinput-format\fR" 4
+.IX Item "--format=input-format"
+.PD
+\&\fBld\fR may be configured to support more than one kind of object
+file. If your \fBld\fR is configured this way, you can use the
+\&\fB\-b\fR option to specify the binary format for input object files
+that follow this option on the command line. Even when \fBld\fR is
+configured to support alternative object formats, you don't usually need
+to specify this, as \fBld\fR should be configured to expect as a
+default input format the most usual format on each machine.
+\&\fIinput-format\fR is a text string, the name of a particular format
+supported by the \s-1BFD\s0 libraries. (You can list the available binary
+formats with \fBobjdump \-i\fR.)
+.Sp
+You may want to use this option if you are linking files with an unusual
+binary format. You can also use \fB\-b\fR to switch formats explicitly (when
+linking object files of different formats), by including
+\&\fB\-b\fR \fIinput-format\fR before each group of object files in a
+particular format.
+.Sp
+The default format is taken from the environment variable
+\&\f(CW\*(C`GNUTARGET\*(C'\fR.
+.Sp
+You can also define the input format from a script, using the command
+\&\f(CW\*(C`TARGET\*(C'\fR;
+.IP "\fB\-c\fR \fIMRI-commandfile\fR" 4
+.IX Item "-c MRI-commandfile"
+.PD 0
+.IP "\fB\-\-mri\-script=\fR\fIMRI-commandfile\fR" 4
+.IX Item "--mri-script=MRI-commandfile"
+.PD
+For compatibility with linkers produced by \s-1MRI\s0, \fBld\fR accepts script
+files written in an alternate, restricted command language, described in
+the \s-1MRI\s0 Compatible Script Files section of \s-1GNU\s0 ld documentation.
+Introduce \s-1MRI\s0 script files with
+the option \fB\-c\fR; use the \fB\-T\fR option to run linker
+scripts written in the general-purpose \fBld\fR scripting language.
+If \fIMRI-cmdfile\fR does not exist, \fBld\fR looks for it in the directories
+specified by any \fB\-L\fR options.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.PD 0
+.IP "\fB\-dc\fR" 4
+.IX Item "-dc"
+.IP "\fB\-dp\fR" 4
+.IX Item "-dp"
+.PD
+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 \fB\-r\fR). The
+script command \f(CW\*(C`FORCE_COMMON_ALLOCATION\*(C'\fR has the same effect.
+.IP "\fB\-e\fR \fIentry\fR" 4
+.IX Item "-e entry"
+.PD 0
+.IP "\fB\-\-entry=\fR\fIentry\fR" 4
+.IX Item "--entry=entry"
+.PD
+Use \fIentry\fR as the explicit symbol for beginning execution of your
+program, rather than the default entry point. If there is no symbol
+named \fIentry\fR, the linker will try to parse \fIentry\fR as a number,
+and use that as the entry address (the number will be interpreted in
+base 10; you may use a leading \fB0x\fR for base 16, or a leading
+\&\fB0\fR for base 8).
+.IP "\fB\-\-exclude\-libs\fR \fIlib\fR\fB,\fR\fIlib\fR\fB,...\fR" 4
+.IX Item "--exclude-libs lib,lib,..."
+Specifies a list of archive libraries from which symbols should not be automatically
+exported. The library names may be delimited by commas or colons. Specifying
+\&\f(CW\*(C`\-\-exclude\-libs ALL\*(C'\fR excludes symbols in all archive libraries from
+automatic export. This option is available only for the i386 \s-1PE\s0 targeted
+port of the linker and for \s-1ELF\s0 targeted ports. For i386 \s-1PE\s0, symbols
+explicitly listed in a .def file are still exported, regardless of this
+option. For \s-1ELF\s0 targeted ports, symbols affected by this option will
+be treated as hidden.
+.IP "\fB\-E\fR" 4
+.IX Item "-E"
+.PD 0
+.IP "\fB\-\-export\-dynamic\fR" 4
+.IX Item "--export-dynamic"
+.PD
+When creating a dynamically linked executable, add all symbols to the
+dynamic symbol table. The dynamic symbol table is the set of symbols
+which are visible from dynamic objects at run time.
+.Sp
+If you do not use this option, the dynamic symbol table will normally
+contain only those symbols which are referenced by some dynamic object
+mentioned in the link.
+.Sp
+If you use \f(CW\*(C`dlopen\*(C'\fR 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.
+.Sp
+You can also use the version script to control what symbols should
+be added to the dynamic symbol table if the output format supports it.
+See the description of \fB\-\-version\-script\fR in \fB\s-1VERSION\s0\fR.
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+Link big-endian objects. This affects the default output format.
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+Link little-endian objects. This affects the default output format.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+.PD 0
+.IP "\fB\-\-auxiliary\fR \fIname\fR" 4
+.IX Item "--auxiliary name"
+.PD
+When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_AUXILIARY\s0 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 \fIname\fR.
+.Sp
+If you later link a program against this filter object, then, when you
+run the program, the dynamic linker will see the \s-1DT_AUXILIARY\s0 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
+\&\fIname\fR. If there is one, it will be used instead of the definition
+in the filter object. The shared object \fIname\fR need not exist.
+Thus the shared object \fIname\fR may be used to provide an alternative
+implementation of certain functions, perhaps for debugging or for
+machine specific performance.
+.Sp
+This option may be specified more than once. The \s-1DT_AUXILIARY\s0 entries
+will be created in the order in which they appear on the command line.
+.IP "\fB\-F\fR \fIname\fR" 4
+.IX Item "-F name"
+.PD 0
+.IP "\fB\-\-filter\fR \fIname\fR" 4
+.IX Item "--filter name"
+.PD
+When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_FILTER\s0 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 \fIname\fR.
+.Sp
+If you later link a program against this filter object, then, when you
+run the program, the dynamic linker will see the \s-1DT_FILTER\s0 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 \fIname\fR. Thus the filter object can be
+used to select a subset of the symbols provided by the object
+\&\fIname\fR.
+.Sp
+Some older linkers used the \fB\-F\fR option throughout a compilation
+toolchain for specifying object-file format for both input and output
+object files.
+The \s-1GNU\s0 linker uses other mechanisms for this purpose: the
+\&\fB\-b\fR, \fB\-\-format\fR, \fB\-\-oformat\fR options, the
+\&\f(CW\*(C`TARGET\*(C'\fR command in linker scripts, and the \f(CW\*(C`GNUTARGET\*(C'\fR
+environment variable.
+The \s-1GNU\s0 linker will ignore the \fB\-F\fR option when not
+creating an \s-1ELF\s0 shared object.
+.IP "\fB\-fini\fR \fIname\fR" 4
+.IX Item "-fini name"
+When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
+executable or shared object is unloaded, by setting \s-1DT_FINI\s0 to the
+address of the function. By default, the linker uses \f(CW\*(C`_fini\*(C'\fR as
+the function to call.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+Ignored. Provided for compatibility with other tools.
+.IP "\fB\-G\fR\fIvalue\fR" 4
+.IX Item "-Gvalue"
+.PD 0
+.IP "\fB\-\-gpsize=\fR\fIvalue\fR" 4
+.IX Item "--gpsize=value"
+.PD
+Set the maximum size of objects to be optimized using the \s-1GP\s0 register to
+\&\fIsize\fR. This is only meaningful for object file formats such as
+\&\s-1MIPS\s0 \s-1ECOFF\s0 which supports putting large and small objects into different
+sections. This is ignored for other object file formats.
+.IP "\fB\-h\fR\fIname\fR" 4
+.IX Item "-hname"
+.PD 0
+.IP "\fB\-soname=\fR\fIname\fR" 4
+.IX Item "-soname=name"
+.PD
+When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_SONAME\s0 field to
+the specified name. When an executable is linked with a shared object
+which has a \s-1DT_SONAME\s0 field, then when the executable is run the dynamic
+linker will attempt to load the shared object specified by the \s-1DT_SONAME\s0
+field rather than the using the file name given to the linker.
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+Perform an incremental link (same as option \fB\-r\fR).
+.IP "\fB\-init\fR \fIname\fR" 4
+.IX Item "-init name"
+When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
+executable or shared object is loaded, by setting \s-1DT_INIT\s0 to the address
+of the function. By default, the linker uses \f(CW\*(C`_init\*(C'\fR as the
+function to call.
+.IP "\fB\-l\fR\fIarchive\fR" 4
+.IX Item "-larchive"
+.PD 0
+.IP "\fB\-\-library=\fR\fIarchive\fR" 4
+.IX Item "--library=archive"
+.PD
+Add archive file \fIarchive\fR to the list of files to link. This
+option may be used any number of times. \fBld\fR will search its
+path-list for occurrences of \f(CW\*(C`lib\f(CIarchive\f(CW.a\*(C'\fR for every
+\&\fIarchive\fR specified.
+.Sp
+On systems which support shared libraries, \fBld\fR may also search for
+libraries with extensions other than \f(CW\*(C`.a\*(C'\fR. Specifically, on \s-1ELF\s0
+and SunOS systems, \fBld\fR will search a directory for a library with
+an extension of \f(CW\*(C`.so\*(C'\fR before searching for one with an extension of
+\&\f(CW\*(C`.a\*(C'\fR. By convention, a \f(CW\*(C`.so\*(C'\fR extension indicates a shared
+library.
+.Sp
+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.
+.Sp
+See the \fB\-(\fR option for a way to force the linker to search
+archives multiple times.
+.Sp
+You may list the same archive multiple times on the command line.
+.Sp
+This type of archive searching is standard for Unix linkers. However,
+if you are using \fBld\fR on \s-1AIX\s0, note that it is different from the
+behaviour of the \s-1AIX\s0 linker.
+.IP "\fB\-L\fR\fIsearchdir\fR" 4
+.IX Item "-Lsearchdir"
+.PD 0
+.IP "\fB\-\-library\-path=\fR\fIsearchdir\fR" 4
+.IX Item "--library-path=searchdir"
+.PD
+Add path \fIsearchdir\fR to the list of paths that \fBld\fR will search
+for archive libraries and \fBld\fR 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
+\&\fB\-L\fR options apply to all \fB\-l\fR options, regardless of the
+order in which the options appear.
+.Sp
+If \fIsearchdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
+by the \fIsysroot prefix\fR, a path specified when the linker is configured.
+.Sp
+The default set of paths searched (without being specified with
+\&\fB\-L\fR) depends on which emulation mode \fBld\fR is using, and in
+some cases also on how it was configured.
+.Sp
+The paths can also be specified in a link script with the
+\&\f(CW\*(C`SEARCH_DIR\*(C'\fR command. Directories specified this way are searched
+at the point in which the linker script appears in the command line.
+.IP "\fB\-m\fR\fIemulation\fR" 4
+.IX Item "-memulation"
+Emulate the \fIemulation\fR linker. You can list the available
+emulations with the \fB\-\-verbose\fR or \fB\-V\fR options.
+.Sp
+If the \fB\-m\fR option is not used, the emulation is taken from the
+\&\f(CW\*(C`LDEMULATION\*(C'\fR environment variable, if that is defined.
+.Sp
+Otherwise, the default emulation depends upon how the linker was
+configured.
+.IP "\fB\-M\fR" 4
+.IX Item "-M"
+.PD 0
+.IP "\fB\-\-print\-map\fR" 4
+.IX Item "--print-map"
+.PD
+Print a link map to the standard output. A link map provides
+information about the link, including the following:
+.RS 4
+.IP "*" 4
+Where object files are mapped into memory.
+.IP "*" 4
+How common symbols are allocated.
+.IP "*" 4
+All archive members included in the link, with a mention of the symbol
+which caused the archive member to be brought in.
+.IP "*" 4
+The values assigned to symbols.
+.Sp
+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:
+.Sp
+.Vb 3
+\& foo = 1
+\& foo = foo * 4
+\& foo = foo + 8
+.Ve
+.Sp
+will produce the following output in the link map if the \fB\-M\fR
+option is used:
+.Sp
+.Vb 3
+\& 0x00000001 foo = 0x1
+\& [0x0000000c] foo = (foo * 0x4)
+\& [0x0000000c] foo = (foo + 0x8)
+.Ve
+.Sp
+See \fBExpressions\fR for more information about expressions in linker
+scripts.
+.RE
+.RS 4
+.RE
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD 0
+.IP "\fB\-\-nmagic\fR" 4
+.IX Item "--nmagic"
+.PD
+Turn off page alignment of sections, and mark the output as
+\&\f(CW\*(C`NMAGIC\*(C'\fR if possible.
+.IP "\fB\-N\fR" 4
+.IX Item "-N"
+.PD 0
+.IP "\fB\-\-omagic\fR" 4
+.IX Item "--omagic"
+.PD
+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 \f(CW\*(C`OMAGIC\*(C'\fR. Note: Although a writable text section
+is allowed for PE-COFF targets, it does not conform to the format
+specification published by Microsoft.
+.IP "\fB\-\-no\-omagic\fR" 4
+.IX Item "--no-omagic"
+This option negates most of the effects of the \fB\-N\fR 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 \fB\-Bdynamic\fR for this.
+.IP "\fB\-o\fR \fIoutput\fR" 4
+.IX Item "-o output"
+.PD 0
+.IP "\fB\-\-output=\fR\fIoutput\fR" 4
+.IX Item "--output=output"
+.PD
+Use \fIoutput\fR as the name for the program produced by \fBld\fR; if this
+option is not specified, the name \fIa.out\fR is used by default. The
+script command \f(CW\*(C`OUTPUT\*(C'\fR can also specify the output file name.
+.IP "\fB\-O\fR \fIlevel\fR" 4
+.IX Item "-O level"
+If \fIlevel\fR is a numeric values greater than zero \fBld\fR optimizes
+the output. This might take significantly longer and therefore probably
+should only be enabled for the final binary.
+.IP "\fB\-q\fR" 4
+.IX Item "-q"
+.PD 0
+.IP "\fB\-\-emit\-relocs\fR" 4
+.IX Item "--emit-relocs"
+.PD
+Leave relocation sections and contents in fully linked exececutables.
+Post link analysis and optimization tools may need this information in
+order to perform correct modifications of executables. This results
+in larger executables.
+.Sp
+This option is currently only supported on \s-1ELF\s0 platforms.
+.IP "\fB\-\-force\-dynamic\fR" 4
+.IX Item "--force-dynamic"
+Force the output file to have dynamic sections. This option is specific
+to VxWorks targets.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.IP "\fB\-\-relocatable\fR" 4
+.IX Item "--relocatable"
+.PD
+Generate relocatable output\-\-\-i.e., generate an output file that can in
+turn serve as input to \fBld\fR. This is often called \fIpartial
+linking\fR. As a side effect, in environments that support standard Unix
+magic numbers, this option also sets the output file's magic number to
+\&\f(CW\*(C`OMAGIC\*(C'\fR.
+If this option is not specified, an absolute file is produced. When
+linking \*(C+ programs, this option \fIwill not\fR resolve references to
+constructors; to do that, use \fB\-Ur\fR.
+.Sp
+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 \f(CW\*(C`a.out\*(C'\fR\-based formats do not support partial linking
+with input files in other formats at all.
+.Sp
+This option does the same thing as \fB\-i\fR.
+.IP "\fB\-R\fR \fIfilename\fR" 4
+.IX Item "-R filename"
+.PD 0
+.IP "\fB\-\-just\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--just-symbols=filename"
+.PD
+Read symbol names and their addresses from \fIfilename\fR, 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.
+.Sp
+For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
+followed by a directory name, rather than a file name, it is treated as
+the \fB\-rpath\fR option.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.IP "\fB\-\-strip\-all\fR" 4
+.IX Item "--strip-all"
+.PD
+Omit all symbol information from the output file.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+.PD 0
+.IP "\fB\-\-strip\-debug\fR" 4
+.IX Item "--strip-debug"
+.PD
+Omit debugger symbol information (but not all symbols) from the output file.
+.IP "\fB\-t\fR" 4
+.IX Item "-t"
+.PD 0
+.IP "\fB\-\-trace\fR" 4
+.IX Item "--trace"
+.PD
+Print the names of the input files as \fBld\fR processes them.
+.IP "\fB\-T\fR \fIscriptfile\fR" 4
+.IX Item "-T scriptfile"
+.PD 0
+.IP "\fB\-\-script=\fR\fIscriptfile\fR" 4
+.IX Item "--script=scriptfile"
+.PD
+Use \fIscriptfile\fR as the linker script. This script replaces
+\&\fBld\fR's default linker script (rather than adding to it), so
+\&\fIcommandfile\fR must specify everything necessary to describe the
+output file. If \fIscriptfile\fR does not exist in
+the current directory, \f(CW\*(C`ld\*(C'\fR looks for it in the directories
+specified by any preceding \fB\-L\fR options. Multiple \fB\-T\fR
+options accumulate.
+.IP "\fB\-u\fR \fIsymbol\fR" 4
+.IX Item "-u symbol"
+.PD 0
+.IP "\fB\-\-undefined=\fR\fIsymbol\fR" 4
+.IX Item "--undefined=symbol"
+.PD
+Force \fIsymbol\fR to be entered in the output file as an undefined
+symbol. Doing this may, for example, trigger linking of additional
+modules from standard libraries. \fB\-u\fR may be repeated with
+different option arguments to enter additional undefined symbols. This
+option is equivalent to the \f(CW\*(C`EXTERN\*(C'\fR linker script command.
+.IP "\fB\-Ur\fR" 4
+.IX Item "-Ur"
+For anything other than \*(C+ programs, this option is equivalent to
+\&\fB\-r\fR: it generates relocatable output\-\-\-i.e., an output file that can in
+turn serve as input to \fBld\fR. When linking \*(C+ programs, \fB\-Ur\fR
+\&\fIdoes\fR resolve references to constructors, unlike \fB\-r\fR.
+It does not work to use \fB\-Ur\fR on files that were themselves linked
+with \fB\-Ur\fR; once the constructor table has been built, it cannot
+be added to. Use \fB\-Ur\fR only for the last partial link, and
+\&\fB\-r\fR for the others.
+.IP "\fB\-\-unique[=\fR\fI\s-1SECTION\s0\fR\fB]\fR" 4
+.IX Item "--unique[=SECTION]"
+Creates a separate output section for every input section matching
+\&\fI\s-1SECTION\s0\fR, or if the optional wildcard \fI\s-1SECTION\s0\fR 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.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD
+Display the version number for \fBld\fR. The \fB\-V\fR option also
+lists the supported emulations.
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+.PD 0
+.IP "\fB\-\-discard\-all\fR" 4
+.IX Item "--discard-all"
+.PD
+Delete all local symbols.
+.IP "\fB\-X\fR" 4
+.IX Item "-X"
+.PD 0
+.IP "\fB\-\-discard\-locals\fR" 4
+.IX Item "--discard-locals"
+.PD
+Delete all temporary local symbols. For most targets, this is all local
+symbols whose names begin with \fBL\fR.
+.IP "\fB\-y\fR \fIsymbol\fR" 4
+.IX Item "-y symbol"
+.PD 0
+.IP "\fB\-\-trace\-symbol=\fR\fIsymbol\fR" 4
+.IX Item "--trace-symbol=symbol"
+.PD
+Print the name of each linked file in which \fIsymbol\fR appears. This
+option may be given any number of times. On many systems it is necessary
+to prepend an underscore.
+.Sp
+This option is useful when you have an undefined symbol in your link but
+don't know where the reference is coming from.
+.IP "\fB\-Y\fR \fIpath\fR" 4
+.IX Item "-Y path"
+Add \fIpath\fR to the default library search path. This option exists
+for Solaris compatibility.
+.IP "\fB\-z\fR \fIkeyword\fR" 4
+.IX Item "-z keyword"
+The recognized keywords are:
+.RS 4
+.IP "\fBcombreloc\fR" 4
+.IX Item "combreloc"
+Combines multiple reloc sections and sorts them to make dynamic symbol
+lookup caching possible.
+.IP "\fBdefs\fR" 4
+.IX Item "defs"
+Disallows undefined symbols in object files. Undefined symbols in
+shared libraries are still allowed.
+.IP "\fBexecstack\fR" 4
+.IX Item "execstack"
+Marks the object as requiring executable stack.
+.IP "\fBinitfirst\fR" 4
+.IX 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.
+.IP "\fBinterpose\fR" 4
+.IX Item "interpose"
+Marks the object that its symbol table interposes before all symbols
+but the primary executable.
+.IP "\fBloadfltr\fR" 4
+.IX Item "loadfltr"
+Marks the object that its filters be processed immediately at
+runtime.
+.IP "\fBmuldefs\fR" 4
+.IX Item "muldefs"
+Allows multiple definitions.
+.IP "\fBnocombreloc\fR" 4
+.IX Item "nocombreloc"
+Disables multiple reloc sections combining.
+.IP "\fBnocopyreloc\fR" 4
+.IX Item "nocopyreloc"
+Disables production of copy relocs.
+.IP "\fBnodefaultlib\fR" 4
+.IX Item "nodefaultlib"
+Marks the object that the search for dependencies of this object will
+ignore any default library search paths.
+.IP "\fBnodelete\fR" 4
+.IX Item "nodelete"
+Marks the object shouldn't be unloaded at runtime.
+.IP "\fBnodlopen\fR" 4
+.IX Item "nodlopen"
+Marks the object not available to \f(CW\*(C`dlopen\*(C'\fR.
+.IP "\fBnodump\fR" 4
+.IX Item "nodump"
+Marks the object can not be dumped by \f(CW\*(C`dldump\*(C'\fR.
+.IP "\fBnoexecstack\fR" 4
+.IX Item "noexecstack"
+Marks the object as not requiring executable stack.
+.IP "\fBnorelro\fR" 4
+.IX Item "norelro"
+Don't create an \s-1ELF\s0 \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment header in the object.
+.IP "\fBnow\fR" 4
+.IX 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.
+.IP "\fBorigin\fR" 4
+.IX Item "origin"
+Marks the object may contain \f(CW$ORIGIN\fR.
+.IP "\fBrelro\fR" 4
+.IX Item "relro"
+Create an \s-1ELF\s0 \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment header in the object.
+.RE
+.RS 4
+.Sp
+Other keywords are ignored for Solaris compatibility.
+.RE
+.IP "\fB\-(\fR \fIarchives\fR \fB\-)\fR" 4
+.IX Item "-( archives -)"
+.PD 0
+.IP "\fB\-\-start\-group\fR \fIarchives\fR \fB\-\-end\-group\fR" 4
+.IX Item "--start-group archives --end-group"
+.PD
+The \fIarchives\fR should be a list of archive files. They may be
+either explicit file names, or \fB\-l\fR options.
+.Sp
+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.
+.Sp
+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.
+.IP "\fB\-\-accept\-unknown\-input\-arch\fR" 4
+.IX Item "--accept-unknown-input-arch"
+.PD 0
+.IP "\fB\-\-no\-accept\-unknown\-input\-arch\fR" 4
+.IX Item "--no-accept-unknown-input-arch"
+.PD
+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 \fB\-\-accept\-unknown\-input\-arch\fR option has been added to
+restore the old behaviour.
+.IP "\fB\-\-as\-needed\fR" 4
+.IX Item "--as-needed"
+.PD 0
+.IP "\fB\-\-no\-as\-needed\fR" 4
+.IX Item "--no-as-needed"
+.PD
+This option affects \s-1ELF\s0 \s-1DT_NEEDED\s0 tags for dynamic libraries mentioned
+on the command line after the \fB\-\-as\-needed\fR option. Normally,
+the linker will add a \s-1DT_NEEDED\s0 tag for each dynamic library mentioned
+on the command line, regardless of whether the library is actually
+needed. \fB\-\-as\-needed\fR causes \s-1DT_NEEDED\s0 tags to only be emitted
+for libraries that satisfy some symbol reference from regular objects
+which is undefined at the point that the library was linked.
+\&\fB\-\-no\-as\-needed\fR restores the default behaviour.
+.IP "\fB\-\-add\-needed\fR" 4
+.IX Item "--add-needed"
+.PD 0
+.IP "\fB\-\-no\-add\-needed\fR" 4
+.IX Item "--no-add-needed"
+.PD
+This option affects the treatment of dynamic libraries from \s-1ELF\s0
+\&\s-1DT_NEEDED\s0 tags in dynamic libraries mentioned on the command line after
+the \fB\-\-no\-add\-needed\fR option. Normally, the linker will add
+a \s-1DT_NEEDED\s0 tag for each dynamic library from \s-1DT_NEEDED\s0 tags.
+\&\fB\-\-no\-add\-needed\fR causes \s-1DT_NEEDED\s0 tags will never be emitted
+for those libraries from \s-1DT_NEEDED\s0 tags. \fB\-\-add\-needed\fR restores
+the default behaviour.
+.IP "\fB\-assert\fR \fIkeyword\fR" 4
+.IX Item "-assert keyword"
+This option is ignored for SunOS compatibility.
+.IP "\fB\-Bdynamic\fR" 4
+.IX Item "-Bdynamic"
+.PD 0
+.IP "\fB\-dy\fR" 4
+.IX Item "-dy"
+.IP "\fB\-call_shared\fR" 4
+.IX Item "-call_shared"
+.PD
+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
+\&\fB\-l\fR options which follow it.
+.IP "\fB\-Bgroup\fR" 4
+.IX Item "-Bgroup"
+Set the \f(CW\*(C`DF_1_GROUP\*(C'\fR flag in the \f(CW\*(C`DT_FLAGS_1\*(C'\fR 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.
+\&\fB\-\-unresolved\-symbols=report\-all\fR is implied. This option is
+only meaningful on \s-1ELF\s0 platforms which support shared libraries.
+.IP "\fB\-Bstatic\fR" 4
+.IX Item "-Bstatic"
+.PD 0
+.IP "\fB\-dn\fR" 4
+.IX Item "-dn"
+.IP "\fB\-non_shared\fR" 4
+.IX Item "-non_shared"
+.IP "\fB\-static\fR" 4
+.IX Item "-static"
+.PD
+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 \fB\-l\fR options which follow it. This
+option also implies \fB\-\-unresolved\-symbols=report\-all\fR. This
+option can be used with \fB\-shared\fR. 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.
+.IP "\fB\-Bsymbolic\fR" 4
+.IX 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 \s-1ELF\s0
+platforms which support shared libraries.
+.IP "\fB\-\-check\-sections\fR" 4
+.IX Item "--check-sections"
+.PD 0
+.IP "\fB\-\-no\-check\-sections\fR" 4
+.IX Item "--no-check-sections"
+.PD
+Asks the linker \fInot\fR 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 \fB\-\-check\-sections\fR.
+.IP "\fB\-\-cref\fR" 4
+.IX 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.
+.Sp
+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.
+.IP "\fB\-\-no\-define\-common\fR" 4
+.IX Item "--no-define-common"
+This option inhibits the assignment of addresses to common symbols.
+The script command \f(CW\*(C`INHIBIT_COMMON_ALLOCATION\*(C'\fR has the same effect.
+.Sp
+The \fB\-\-no\-define\-common\fR 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 \fB\-\-no\-define\-common\fR 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.
+.IP "\fB\-\-defsym\fR \fIsymbol\fR\fB=\fR\fIexpression\fR" 4
+.IX Item "--defsym symbol=expression"
+Create a global symbol in the output file, containing the absolute
+address given by \fIexpression\fR. 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 \fIexpression\fR in this
+context: you may give a hexadecimal constant or the name of an existing
+symbol, or use \f(CW\*(C`+\*(C'\fR and \f(CW\*(C`\-\*(C'\fR to add or subtract hexadecimal
+constants or symbols. If you need more elaborate expressions, consider
+using the linker command language from a script. \fINote:\fR there should be no white
+space between \fIsymbol\fR, the equals sign ("\fB=\fR"), and
+\&\fIexpression\fR.
+.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
+.IX Item "--demangle[=style]"
+.PD 0
+.IP "\fB\-\-no\-demangle\fR" 4
+.IX Item "--no-demangle"
+.PD
+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 \fB\s-1COLLECT_NO_DEMANGLE\s0\fR
+is set. These options may be used to override the default.
+.IP "\fB\-\-dynamic\-linker\fR \fIfile\fR" 4
+.IX Item "--dynamic-linker file"
+Set the name of the dynamic linker. This is only meaningful when
+generating dynamically linked \s-1ELF\s0 executables. The default dynamic
+linker is normally correct; don't use this unless you know what you are
+doing.
+.IP "\fB\-\-fatal\-warnings\fR" 4
+.IX Item "--fatal-warnings"
+Treat all warnings as errors.
+.IP "\fB\-\-force\-exe\-suffix\fR" 4
+.IX Item "--force-exe-suffix"
+Make sure that an output file has a .exe suffix.
+.Sp
+If a successfully built fully linked output file does not have a
+\&\f(CW\*(C`.exe\*(C'\fR or \f(CW\*(C`.dll\*(C'\fR suffix, this option forces the linker to copy
+the output file to one of the same name with a \f(CW\*(C`.exe\*(C'\fR 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 \f(CW\*(C`.exe\*(C'\fR suffix.
+.IP "\fB\-\-no\-gc\-sections\fR" 4
+.IX Item "--no-gc-sections"
+.PD 0
+.IP "\fB\-\-gc\-sections\fR" 4
+.IX Item "--gc-sections"
+.PD
+Enable garbage collection of unused input sections. It is ignored on
+targets that do not support this option. This option is not compatible
+with \fB\-r\fR. The default behaviour (of not performing this garbage
+collection) can be restored by specifying \fB\-\-no\-gc\-sections\fR on
+the command line.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of the command-line options on the standard output and exit.
+.IP "\fB\-\-target\-help\fR" 4
+.IX Item "--target-help"
+Print a summary of all target specific options on the standard output and exit.
+.IP "\fB\-Map\fR \fImapfile\fR" 4
+.IX Item "-Map mapfile"
+Print a link map to the file \fImapfile\fR. See the description of the
+\&\fB\-M\fR option, above.
+.IP "\fB\-\-no\-keep\-memory\fR" 4
+.IX Item "--no-keep-memory"
+\&\fBld\fR normally optimizes for speed over memory usage by caching the
+symbol tables of input files in memory. This option tells \fBld\fR to
+instead optimize for memory usage, by rereading the symbol tables as
+necessary. This may be required if \fBld\fR runs out of memory space
+while linking a large executable.
+.IP "\fB\-\-no\-undefined\fR" 4
+.IX Item "--no-undefined"
+.PD 0
+.IP "\fB\-z defs\fR" 4
+.IX Item "-z defs"
+.PD
+Report unresolved symbol references from regular object files. This
+is done even if the linker is creating a non-symbolic shared library.
+The switch \fB\-\-[no\-]allow\-shlib\-undefined\fR controls the
+behaviour for reporting unresolved references found in shared
+libraries being linked in.
+.IP "\fB\-\-allow\-multiple\-definition\fR" 4
+.IX Item "--allow-multiple-definition"
+.PD 0
+.IP "\fB\-z muldefs\fR" 4
+.IX Item "-z muldefs"
+.PD
+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.
+.IP "\fB\-\-allow\-shlib\-undefined\fR" 4
+.IX Item "--allow-shlib-undefined"
+.PD 0
+.IP "\fB\-\-no\-allow\-shlib\-undefined\fR" 4
+.IX Item "--no-allow-shlib-undefined"
+.PD
+Allows (the default) or disallows undefined symbols in shared libraries.
+This switch is similar to \fB\-\-no\-undefined\fR 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.
+.Sp
+The reason that \fB\-\-allow\-shlib\-undefined\fR is the default is that
+the shared library being specified at link time may not be the same as
+the one that is available at load time, so the symbols might actually be
+resolvable at load time. Plus there are some systems, (eg BeOS) where
+undefined symbols in shared libraries is normal. (The kernel patches
+them at load time to select which function is most appropriate
+for the current architecture. This is used for example to dynamically
+select an appropriate memset function). Apparently it is also normal
+for \s-1HPPA\s0 shared libraries to have undefined symbols.
+.IP "\fB\-\-no\-undefined\-version\fR" 4
+.IX 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.
+.IP "\fB\-\-default\-symver\fR" 4
+.IX Item "--default-symver"
+Create and use a default symbol version (the soname) for unversioned
+exported symbols.
+.IP "\fB\-\-default\-imported\-symver\fR" 4
+.IX Item "--default-imported-symver"
+Create and use a default symbol version (the soname) for unversioned
+imported symbols.
+.IP "\fB\-\-no\-warn\-mismatch\fR" 4
+.IX Item "--no-warn-mismatch"
+Normally \fBld\fR 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 \fBld\fR 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.
+.IP "\fB\-\-no\-whole\-archive\fR" 4
+.IX Item "--no-whole-archive"
+Turn off the effect of the \fB\-\-whole\-archive\fR option for subsequent
+archive files.
+.IP "\fB\-\-noinhibit\-exec\fR" 4
+.IX 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.
+.IP "\fB\-nostdlib\fR" 4
+.IX 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.
+.IP "\fB\-\-oformat\fR \fIoutput-format\fR" 4
+.IX Item "--oformat output-format"
+\&\fBld\fR may be configured to support more than one kind of object
+file. If your \fBld\fR is configured this way, you can use the
+\&\fB\-\-oformat\fR option to specify the binary format for the output
+object file. Even when \fBld\fR is configured to support alternative
+object formats, you don't usually need to specify this, as \fBld\fR
+should be configured to produce as a default output format the most
+usual format on each machine. \fIoutput-format\fR is a text string, the
+name of a particular format supported by the \s-1BFD\s0 libraries. (You can
+list the available binary formats with \fBobjdump \-i\fR.) The script
+command \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR can also specify the output format, but
+this option overrides it.
+.IP "\fB\-pie\fR" 4
+.IX Item "-pie"
+.PD 0
+.IP "\fB\-\-pic\-executable\fR" 4
+.IX Item "--pic-executable"
+.PD
+Create a position independent executable. This is currently only supported on
+\&\s-1ELF\s0 platforms. Position independent executables are similar to shared
+libraries in that they are relocated by the dynamic linker to the virtual
+address the \s-1OS\s0 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.
+.IP "\fB\-qmagic\fR" 4
+.IX Item "-qmagic"
+This option is ignored for Linux compatibility.
+.IP "\fB\-Qy\fR" 4
+.IX Item "-Qy"
+This option is ignored for \s-1SVR4\s0 compatibility.
+.IP "\fB\-\-relax\fR" 4
+.IX Item "--relax"
+An option with machine dependent effects.
+This option is only supported on a few targets.
+.Sp
+On some platforms, the \fB\-\-relax\fR option performs global
+optimizations that become possible when the linker resolves addressing
+in the program, such as relaxing address modes and synthesizing new
+instructions in the output object file.
+.Sp
+On some platforms these link time global optimizations may make symbolic
+debugging of the resulting executable impossible.
+This is known to be
+the case for the Matsushita \s-1MN10200\s0 and \s-1MN10300\s0 family of processors.
+.Sp
+On platforms where this is not supported, \fB\-\-relax\fR is accepted,
+but ignored.
+.IP "\fB\-\-retain\-symbols\-file\fR \fIfilename\fR" 4
+.IX Item "--retain-symbols-file filename"
+Retain \fIonly\fR the symbols listed in the file \fIfilename\fR,
+discarding all others. \fIfilename\fR is simply a flat file, with one
+symbol name per line. This option is especially useful in environments
+(such as VxWorks)
+where a large global symbol table is accumulated gradually, to conserve
+run-time memory.
+.Sp
+\&\fB\-\-retain\-symbols\-file\fR does \fInot\fR discard undefined symbols,
+or symbols needed for relocations.
+.Sp
+You may only specify \fB\-\-retain\-symbols\-file\fR once in the command
+line. It overrides \fB\-s\fR and \fB\-S\fR.
+.IP "\fB\-rpath\fR \fIdir\fR" 4
+.IX Item "-rpath dir"
+Add a directory to the runtime library search path. This is used when
+linking an \s-1ELF\s0 executable with shared objects. All \fB\-rpath\fR
+arguments are concatenated and passed to the runtime linker, which uses
+them to locate shared objects at runtime. The \fB\-rpath\fR option is
+also used when locating shared objects which are needed by shared
+objects explicitly included in the link; see the description of the
+\&\fB\-rpath\-link\fR option. If \fB\-rpath\fR is not used when linking an
+\&\s-1ELF\s0 executable, the contents of the environment variable
+\&\f(CW\*(C`LD_RUN_PATH\*(C'\fR will be used if it is defined.
+.Sp
+The \fB\-rpath\fR option may also be used on SunOS. By default, on
+SunOS, the linker will form a runtime search patch out of all the
+\&\fB\-L\fR options it is given. If a \fB\-rpath\fR option is used, the
+runtime search path will be formed exclusively using the \fB\-rpath\fR
+options, ignoring the \fB\-L\fR options. This can be useful when using
+gcc, which adds many \fB\-L\fR options which may be on \s-1NFS\s0 mounted
+filesystems.
+.Sp
+For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
+followed by a directory name, rather than a file name, it is treated as
+the \fB\-rpath\fR option.
+.IP "\fB\-rpath\-link\fR \fI\s-1DIR\s0\fR" 4
+.IX Item "-rpath-link DIR"
+When using \s-1ELF\s0 or SunOS, one shared library may require another. This
+happens when an \f(CW\*(C`ld \-shared\*(C'\fR link includes a shared library as one
+of the input files.
+.Sp
+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 \fB\-rpath\-link\fR option
+specifies the first set of directories to search. The
+\&\fB\-rpath\-link\fR option may specify a sequence of directory names
+either by specifying a list of names separated by colons, or by
+appearing multiple times.
+.Sp
+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.
+.Sp
+The linker uses the following search paths to locate required shared
+libraries.
+.RS 4
+.IP "1." 4
+Any directories specified by \fB\-rpath\-link\fR options.
+.IP "2." 4
+Any directories specified by \fB\-rpath\fR options. The difference
+between \fB\-rpath\fR and \fB\-rpath\-link\fR is that directories
+specified by \fB\-rpath\fR options are included in the executable and
+used at runtime, whereas the \fB\-rpath\-link\fR option is only effective
+at link time. It is for the native linker only.
+.IP "3." 4
+On an \s-1ELF\s0 system, if the \fB\-rpath\fR and \f(CW\*(C`rpath\-link\*(C'\fR options
+were not used, search the contents of the environment variable
+\&\f(CW\*(C`LD_RUN_PATH\*(C'\fR. It is for the native linker only.
+.IP "4." 4
+On SunOS, if the \fB\-rpath\fR option was not used, search any
+directories specified using \fB\-L\fR options.
+.IP "5." 4
+For a native linker, the contents of the environment variable
+\&\f(CW\*(C`LD_LIBRARY_PATH\*(C'\fR.
+.IP "6." 4
+For a native \s-1ELF\s0 linker, the directories in \f(CW\*(C`DT_RUNPATH\*(C'\fR or
+\&\f(CW\*(C`DT_RPATH\*(C'\fR of a shared library are searched for shared
+libraries needed by it. The \f(CW\*(C`DT_RPATH\*(C'\fR entries are ignored if
+\&\f(CW\*(C`DT_RUNPATH\*(C'\fR entries exist.
+.IP "7." 4
+The default directories, normally \fI/lib\fR and \fI/usr/lib\fR.
+.IP "8." 4
+For a native linker on an \s-1ELF\s0 system, if the file \fI/etc/ld.so.conf\fR
+exists, the list of directories found in that file.
+.RE
+.RS 4
+.Sp
+If the required shared library is not found, the linker will issue a
+warning and continue with the link.
+.RE
+.IP "\fB\-shared\fR" 4
+.IX Item "-shared"
+.PD 0
+.IP "\fB\-Bshareable\fR" 4
+.IX Item "-Bshareable"
+.PD
+Create a shared library. This is currently only supported on \s-1ELF\s0, \s-1XCOFF\s0
+and SunOS platforms. On SunOS, the linker will automatically create a
+shared library if the \fB\-e\fR option is not used and there are
+undefined symbols in the link.
+.IP "\fB\-\-sort\-common\fR" 4
+.IX Item "--sort-common"
+This option tells \fBld\fR to sort the common symbols by size when it
+places them in the appropriate output sections. First come all the one
+byte symbols, then all the two byte, then all the four byte, and then
+everything else. This is to prevent gaps between symbols due to
+alignment constraints.
+.IP "\fB\-\-sort\-section name\fR" 4
+.IX Item "--sort-section name"
+This option will apply \f(CW\*(C`SORT_BY_NAME\*(C'\fR to all wildcard section
+patterns in the linker script.
+.IP "\fB\-\-sort\-section alignment\fR" 4
+.IX Item "--sort-section alignment"
+This option will apply \f(CW\*(C`SORT_BY_ALIGNMENT\*(C'\fR to all wildcard section
+patterns in the linker script.
+.IP "\fB\-\-split\-by\-file [\fR\fIsize\fR\fB]\fR" 4
+.IX Item "--split-by-file [size]"
+Similar to \fB\-\-split\-by\-reloc\fR but creates a new output section for
+each input file when \fIsize\fR is reached. \fIsize\fR defaults to a
+size of 1 if not given.
+.IP "\fB\-\-split\-by\-reloc [\fR\fIcount\fR\fB]\fR" 4
+.IX Item "--split-by-reloc [count]"
+Tries to creates extra sections in the output file so that no single
+output section in the file contains more than \fIcount\fR relocations.
+This is useful when generating huge relocatable files for downloading into
+certain real time kernels with the \s-1COFF\s0 object file format; since \s-1COFF\s0
+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 \fIcount\fR relocations one output section will contain that
+many relocations. \fIcount\fR defaults to a value of 32768.
+.IP "\fB\-\-stats\fR" 4
+.IX Item "--stats"
+Compute and display statistics about the operation of the linker, such
+as execution time and memory usage.
+.IP "\fB\-\-sysroot=\fR\fIdirectory\fR" 4
+.IX Item "--sysroot=directory"
+Use \fIdirectory\fR as the location of the sysroot, overriding the
+configure-time default. This option is only supported by linkers
+that were configured using \fB\-\-with\-sysroot\fR.
+.IP "\fB\-\-traditional\-format\fR" 4
+.IX Item "--traditional-format"
+For some targets, the output of \fBld\fR is different in some ways from
+the output of some existing linker. This switch requests \fBld\fR to
+use the traditional format instead.
+.Sp
+For example, on SunOS, \fBld\fR 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
+\&\f(CW\*(C`dbx\*(C'\fR program can not read the resulting program (\f(CW\*(C`gdb\*(C'\fR has no
+trouble). The \fB\-\-traditional\-format\fR switch tells \fBld\fR to not
+combine duplicate entries.
+.IP "\fB\-\-section\-start\fR \fIsectionname\fR\fB=\fR\fIorg\fR" 4
+.IX Item "--section-start sectionname=org"
+Locate a section in the output file at the absolute
+address given by \fIorg\fR. You may use this option as many
+times as necessary to locate multiple sections in the command
+line.
+\&\fIorg\fR must be a single hexadecimal integer;
+for compatibility with other linkers, you may omit the leading
+\&\fB0x\fR usually associated with hexadecimal values. \fINote:\fR there
+should be no white space between \fIsectionname\fR, the equals
+sign ("\fB=\fR"), and \fIorg\fR.
+.IP "\fB\-Tbss\fR \fIorg\fR" 4
+.IX Item "-Tbss org"
+.PD 0
+.IP "\fB\-Tdata\fR \fIorg\fR" 4
+.IX Item "-Tdata org"
+.IP "\fB\-Ttext\fR \fIorg\fR" 4
+.IX Item "-Ttext org"
+.PD
+Same as \-\-section\-start, with \f(CW\*(C`.bss\*(C'\fR, \f(CW\*(C`.data\*(C'\fR or
+\&\f(CW\*(C`.text\*(C'\fR as the \fIsectionname\fR.
+.IP "\fB\-\-unresolved\-symbols=\fR\fImethod\fR" 4
+.IX Item "--unresolved-symbols=method"
+Determine how to handle unresolved symbols. There are four possible
+values for \fBmethod\fR:
+.RS 4
+.IP "\fBignore-all\fR" 4
+.IX Item "ignore-all"
+Do not report any unresolved symbols.
+.IP "\fBreport-all\fR" 4
+.IX Item "report-all"
+Report all unresolved symbols. This is the default.
+.IP "\fBignore-in-object-files\fR" 4
+.IX Item "ignore-in-object-files"
+Report unresolved symbols that are contained in shared libraries, but
+ignore them if they come from regular object files.
+.IP "\fBignore-in-shared-libs\fR" 4
+.IX 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.
+.RE
+.RS 4
+.Sp
+The behaviour for shared libraries on their own can also be controlled
+by the \fB\-\-[no\-]allow\-shlib\-undefined\fR option.
+.Sp
+Normally the linker will generate an error message for each reported
+unresolved symbol but the option \fB\-\-warn\-unresolved\-symbols\fR
+can change this to a warning.
+.RE
+.IP "\fB\-\-dll\-verbose\fR" 4
+.IX Item "--dll-verbose"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Display the version number for \fBld\fR and list the linker emulations
+supported. Display which input files can and cannot be opened. Display
+the linker script being used by the linker.
+.IP "\fB\-\-version\-script=\fR\fIversion-scriptfile\fR" 4
+.IX Item "--version-script=version-scriptfile"
+Specify the name of a version script to the linker. This is typically
+used when creating shared libraries to specify additional information
+about the version hierarchy for the library being created. This option
+is only meaningful on \s-1ELF\s0 platforms which support shared libraries.
+.IP "\fB\-\-warn\-common\fR" 4
+.IX 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.
+.Sp
+There are three kinds of global symbols, illustrated here by C examples:
+.RS 4
+.IP "\fBint i = 1;\fR" 4
+.IX Item "int i = 1;"
+A definition, which goes in the initialized data section of the output
+file.
+.IP "\fBextern int i;\fR" 4
+.IX 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.
+.IP "\fBint i;\fR" 4
+.IX 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.
+.RE
+.RS 4
+.Sp
+The \fB\-\-warn\-common\fR 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.
+.IP "1." 4
+Turning a common symbol into a reference, because there is already a
+definition for the symbol.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: common of `<symbol>'
+\& overridden by definition
+\& <file>(<section>): warning: defined here
+.Ve
+.IP "2." 4
+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.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: definition of `<symbol>'
+\& overriding common
+\& <file>(<section>): warning: common is here
+.Ve
+.IP "3." 4
+Merging a common symbol with a previous same-sized common symbol.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: multiple common
+\& of `<symbol>'
+\& <file>(<section>): warning: previous common is here
+.Ve
+.IP "4." 4
+Merging a common symbol with a previous larger common symbol.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: common of `<symbol>'
+\& overridden by larger common
+\& <file>(<section>): warning: larger common is here
+.Ve
+.IP "5." 4
+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.
+.Sp
+.Vb 3
+\& <file>(<section>): warning: common of `<symbol>'
+\& overriding smaller common
+\& <file>(<section>): warning: smaller common is here
+.Ve
+.RE
+.RS 4
+.RE
+.IP "\fB\-\-warn\-constructors\fR" 4
+.IX Item "--warn-constructors"
+Warn if any global constructors are used. This is only useful for a few
+object file formats. For formats like \s-1COFF\s0 or \s-1ELF\s0, the linker can not
+detect the use of global constructors.
+.IP "\fB\-\-warn\-multiple\-gp\fR" 4
+.IX 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.
+.IP "\fB\-\-warn\-once\fR" 4
+.IX Item "--warn-once"
+Only warn once for each undefined symbol, rather than once per module
+which refers to it.
+.IP "\fB\-\-warn\-section\-align\fR" 4
+.IX 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 \f(CW\*(C`SECTIONS\*(C'\fR command does not specify a start address for
+the section.
+.IP "\fB\-\-warn\-shared\-textrel\fR" 4
+.IX Item "--warn-shared-textrel"
+Warn if the linker adds a \s-1DT_TEXTREL\s0 to a shared object.
+.IP "\fB\-\-warn\-unresolved\-symbols\fR" 4
+.IX Item "--warn-unresolved-symbols"
+If the linker is going to report an unresolved symbol (see the option
+\&\fB\-\-unresolved\-symbols\fR) it will normally generate an error.
+This option makes it generate a warning instead.
+.IP "\fB\-\-error\-unresolved\-symbols\fR" 4
+.IX Item "--error-unresolved-symbols"
+This restores the linker's default behaviour of generating errors when
+it is reporting unresolved symbols.
+.IP "\fB\-\-whole\-archive\fR" 4
+.IX Item "--whole-archive"
+For each archive mentioned on the command line after the
+\&\fB\-\-whole\-archive\fR 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.
+.Sp
+Two notes when using this option from gcc: First, gcc doesn't know
+about this option, so you have to use \fB\-Wl,\-whole\-archive\fR.
+Second, don't forget to use \fB\-Wl,\-no\-whole\-archive\fR 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.
+.IP "\fB\-\-wrap\fR \fIsymbol\fR" 4
+.IX Item "--wrap symbol"
+Use a wrapper function for \fIsymbol\fR. Any undefined reference to
+\&\fIsymbol\fR will be resolved to \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR. Any
+undefined reference to \f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR will be resolved to
+\&\fIsymbol\fR.
+.Sp
+This can be used to provide a wrapper for a system function. The
+wrapper function should be called \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR. If it
+wishes to call the system function, it should call
+\&\f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR.
+.Sp
+Here is a trivial example:
+.Sp
+.Vb 6
+\& void *
+\& __wrap_malloc (size_t c)
+\& {
+\& printf ("malloc called with %zu\en", c);
+\& return __real_malloc (c);
+\& }
+.Ve
+.Sp
+If you link other code with this file using \fB\-\-wrap malloc\fR, then
+all calls to \f(CW\*(C`malloc\*(C'\fR will call the function \f(CW\*(C`_\|_wrap_malloc\*(C'\fR
+instead. The call to \f(CW\*(C`_\|_real_malloc\*(C'\fR in \f(CW\*(C`_\|_wrap_malloc\*(C'\fR will
+call the real \f(CW\*(C`malloc\*(C'\fR function.
+.Sp
+You may wish to provide a \f(CW\*(C`_\|_real_malloc\*(C'\fR function as well, so that
+links without the \fB\-\-wrap\fR option will succeed. If you do this,
+you should not put the definition of \f(CW\*(C`_\|_real_malloc\*(C'\fR in the same
+file as \f(CW\*(C`_\|_wrap_malloc\*(C'\fR; if you do, the assembler may resolve the
+call before the linker has a chance to wrap it to \f(CW\*(C`malloc\*(C'\fR.
+.IP "\fB\-\-eh\-frame\-hdr\fR" 4
+.IX Item "--eh-frame-hdr"
+Request creation of \f(CW\*(C`.eh_frame_hdr\*(C'\fR section and \s-1ELF\s0
+\&\f(CW\*(C`PT_GNU_EH_FRAME\*(C'\fR segment header.
+.IP "\fB\-\-enable\-new\-dtags\fR" 4
+.IX Item "--enable-new-dtags"
+.PD 0
+.IP "\fB\-\-disable\-new\-dtags\fR" 4
+.IX Item "--disable-new-dtags"
+.PD
+This linker can create the new dynamic tags in \s-1ELF\s0. But the older \s-1ELF\s0
+systems may not understand them. If you specify
+\&\fB\-\-enable\-new\-dtags\fR, the dynamic tags will be created as needed.
+If you specify \fB\-\-disable\-new\-dtags\fR, no new dynamic tags will be
+created. By default, the new dynamic tags are not created. Note that
+those options are only available for \s-1ELF\s0 systems.
+.IP "\fB\-\-hash\-size=\fR\fInumber\fR" 4
+.IX Item "--hash-size=number"
+Set the default size of the linker's hash tables to a prime number
+close to \fInumber\fR. 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.
+.IP "\fB\-\-reduce\-memory\-overheads\fR" 4
+.IX 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.
+.Sp
+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 \fB\-\-hash\-size\fR switch
+has been used.
+.Sp
+The \fB\-\-reduce\-memory\-overheads\fR switch may be also be used to
+enable other tradeoffs in future versions of the linker.
+.PP
+The i386 \s-1PE\s0 linker supports the \fB\-shared\fR option, which causes
+the output to be a dynamically linked library (\s-1DLL\s0) instead of a
+normal executable. You should name the output \f(CW\*(C`*.dll\*(C'\fR when you
+use this option. In addition, the linker fully supports the standard
+\&\f(CW\*(C`*.def\*(C'\fR 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).
+.PP
+In addition to the options common to all targets, the i386 \s-1PE\s0 linker
+support additional command line options that are specific to the i386
+\&\s-1PE\s0 target. Options that take values may be separated from their
+values by either a space or an equals sign.
+.IP "\fB\-\-add\-stdcall\-alias\fR" 4
+.IX Item "--add-stdcall-alias"
+If given, symbols with a stdcall suffix (@\fInn\fR) will be exported
+as-is and also with the suffix stripped.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-base\-file\fR \fIfile\fR" 4
+.IX Item "--base-file file"
+Use \fIfile\fR as the name of a file in which to save the base
+addresses of all the relocations needed for generating DLLs with
+\&\fIdlltool\fR.
+[This is an i386 \s-1PE\s0 specific option]
+.IP "\fB\-\-dll\fR" 4
+.IX Item "--dll"
+Create a \s-1DLL\s0 instead of a regular executable. You may also use
+\&\fB\-shared\fR or specify a \f(CW\*(C`LIBRARY\*(C'\fR in a given \f(CW\*(C`.def\*(C'\fR
+file.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-stdcall\-fixup\fR" 4
+.IX Item "--enable-stdcall-fixup"
+.PD 0
+.IP "\fB\-\-disable\-stdcall\-fixup\fR" 4
+.IX Item "--disable-stdcall-fixup"
+.PD
+If the link finds a symbol that it cannot resolve, it will attempt to
+do \*(L"fuzzy linking\*(R" 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 \f(CW\*(C`_foo\*(C'\fR might be linked to the function
+\&\f(CW\*(C`_foo@12\*(C'\fR, or the undefined symbol \f(CW\*(C`_bar@16\*(C'\fR might be linked
+to the function \f(CW\*(C`_bar\*(C'\fR. 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 \fB\-\-enable\-stdcall\-fixup\fR, this
+feature is fully enabled and warnings are not printed. If you specify
+\&\fB\-\-disable\-stdcall\-fixup\fR, this feature is disabled and such
+mismatches are considered to be errors.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-export\-all\-symbols\fR" 4
+.IX Item "--export-all-symbols"
+If given, all global symbols in the objects used to build a \s-1DLL\s0 will
+be exported by the \s-1DLL\s0. Note that this is the default if there
+otherwise wouldn't be any exported symbols. When symbols are
+explicitly exported via \s-1DEF\s0 files or implicitly exported via function
+attributes, the default is to not export anything else unless this
+option is given. Note that the symbols \f(CW\*(C`DllMain@12\*(C'\fR,
+\&\f(CW\*(C`DllEntryPoint@0\*(C'\fR, \f(CW\*(C`DllMainCRTStartup@12\*(C'\fR, and
+\&\f(CW\*(C`impure_ptr\*(C'\fR will not be automatically
+exported. Also, symbols imported from other DLLs will not be
+re\-exported, nor will symbols specifying the \s-1DLL\s0's internal layout
+such as those beginning with \f(CW\*(C`_head_\*(C'\fR or ending with
+\&\f(CW\*(C`_iname\*(C'\fR. In addition, no symbols from \f(CW\*(C`libgcc\*(C'\fR,
+\&\f(CW\*(C`libstd++\*(C'\fR, \f(CW\*(C`libmingw32\*(C'\fR, or \f(CW\*(C`crtX.o\*(C'\fR will be exported.
+Symbols whose names begin with \f(CW\*(C`_\|_rtti_\*(C'\fR or \f(CW\*(C`_\|_builtin_\*(C'\fR 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: \f(CW\*(C`_cygwin_dll_entry@12\*(C'\fR,
+\&\f(CW\*(C`_cygwin_crt0_common@8\*(C'\fR, \f(CW\*(C`_cygwin_noncygwin_dll_entry@12\*(C'\fR,
+\&\f(CW\*(C`_fmode\*(C'\fR, \f(CW\*(C`_impure_ptr\*(C'\fR, \f(CW\*(C`cygwin_attach_dll\*(C'\fR,
+\&\f(CW\*(C`cygwin_premain0\*(C'\fR, \f(CW\*(C`cygwin_premain1\*(C'\fR, \f(CW\*(C`cygwin_premain2\*(C'\fR,
+\&\f(CW\*(C`cygwin_premain3\*(C'\fR, and \f(CW\*(C`environ\*(C'\fR.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-exclude\-symbols\fR \fIsymbol\fR\fB,\fR\fIsymbol\fR\fB,...\fR" 4
+.IX Item "--exclude-symbols symbol,symbol,..."
+Specifies a list of symbols which should not be automatically
+exported. The symbol names may be delimited by commas or colons.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-file\-alignment\fR" 4
+.IX 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 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-heap\fR \fIreserve\fR" 4
+.IX Item "--heap reserve"
+.PD 0
+.IP "\fB\-\-heap\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
+.IX Item "--heap reserve,commit"
+.PD
+Specify the amount of memory to reserve (and optionally commit) to be
+used as heap for this program. The default is 1Mb reserved, 4K
+committed.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-image\-base\fR \fIvalue\fR" 4
+.IX Item "--image-base value"
+Use \fIvalue\fR 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 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-kill\-at\fR" 4
+.IX Item "--kill-at"
+If given, the stdcall suffixes (@\fInn\fR) will be stripped from
+symbols before they are exported.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-large\-address\-aware\fR" 4
+.IX Item "--large-address-aware"
+If given, the appropriate bit in the \*(L"Charateristics\*(R" field of the \s-1COFF\s0
+header is set to indicate that this executable supports virtual addresses
+greater than 2 gigabytes. This should be used in conjuction with the /3GB
+or /USERVA=\fIvalue\fR megabytes switch in the \*(L"[operating systems]\*(R"
+section of the \s-1BOOT\s0.INI. Otherwise, this bit has no effect.
+[This option is specific to \s-1PE\s0 targeted ports of the linker]
+.IP "\fB\-\-major\-image\-version\fR \fIvalue\fR" 4
+.IX Item "--major-image-version value"
+Sets the major number of the \*(L"image version\*(R". Defaults to 1.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-major\-os\-version\fR \fIvalue\fR" 4
+.IX Item "--major-os-version value"
+Sets the major number of the \*(L"os version\*(R". Defaults to 4.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-major\-subsystem\-version\fR \fIvalue\fR" 4
+.IX Item "--major-subsystem-version value"
+Sets the major number of the \*(L"subsystem version\*(R". Defaults to 4.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-minor\-image\-version\fR \fIvalue\fR" 4
+.IX Item "--minor-image-version value"
+Sets the minor number of the \*(L"image version\*(R". Defaults to 0.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-minor\-os\-version\fR \fIvalue\fR" 4
+.IX Item "--minor-os-version value"
+Sets the minor number of the \*(L"os version\*(R". Defaults to 0.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-minor\-subsystem\-version\fR \fIvalue\fR" 4
+.IX Item "--minor-subsystem-version value"
+Sets the minor number of the \*(L"subsystem version\*(R". Defaults to 0.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-output\-def\fR \fIfile\fR" 4
+.IX Item "--output-def file"
+The linker will create the file \fIfile\fR which will contain a \s-1DEF\s0
+file corresponding to the \s-1DLL\s0 the linker is generating. This \s-1DEF\s0 file
+(which should be called \f(CW\*(C`*.def\*(C'\fR) may be used to create an import
+library with \f(CW\*(C`dlltool\*(C'\fR or may be used as a reference to
+automatically or implicitly exported symbols.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-out\-implib\fR \fIfile\fR" 4
+.IX Item "--out-implib file"
+The linker will create the file \fIfile\fR which will contain an
+import lib corresponding to the \s-1DLL\s0 the linker is generating. This
+import lib (which should be called \f(CW\*(C`*.dll.a\*(C'\fR or \f(CW\*(C`*.a\*(C'\fR
+may be used to link clients against the generated \s-1DLL\s0; this behaviour
+makes it possible to skip a separate \f(CW\*(C`dlltool\*(C'\fR import library
+creation step.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-auto\-image\-base\fR" 4
+.IX Item "--enable-auto-image-base"
+Automatically choose the image base for DLLs, unless one is specified
+using the \f(CW\*(C`\-\-image\-base\*(C'\fR argument. By using a hash generated
+from the dllname to create unique image bases for each \s-1DLL\s0, in-memory
+collisions and relocations which can delay program execution are
+avoided.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-disable\-auto\-image\-base\fR" 4
+.IX Item "--disable-auto-image-base"
+Do not automatically generate a unique image base. If there is no
+user-specified image base (\f(CW\*(C`\-\-image\-base\*(C'\fR) then use the platform
+default.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-dll\-search\-prefix\fR \fIstring\fR" 4
+.IX Item "--dll-search-prefix string"
+When linking dynamically to a dll without an import library,
+search for \f(CW\*(C`<string><basename>.dll\*(C'\fR in preference to
+\&\f(CW\*(C`lib<basename>.dll\*(C'\fR. This behaviour allows easy distinction
+between DLLs built for the various \*(L"subplatforms\*(R": native, cygwin,
+uwin, pw, etc. For instance, cygwin DLLs typically use
+\&\f(CW\*(C`\-\-dll\-search\-prefix=cyg\*(C'\fR.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-auto\-import\fR" 4
+.IX Item "--enable-auto-import"
+Do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to \f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for
+\&\s-1DATA\s0 imports from DLLs, and create the necessary thunking symbols when
+building the import libraries with those \s-1DATA\s0 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.
+.Sp
+Using 'auto\-import' generally will 'just work' \*(-- but sometimes you may
+see this message:
+.Sp
+"variable '<var>' can't be auto\-imported. Please read the
+documentation for ld's \f(CW\*(C`\-\-enable\-auto\-import\*(C'\fR for details."
+.Sp
+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 \s-1DLL\s0, as well as using a
+constant index into an array variable imported from a \s-1DLL\s0. 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.
+.Sp
+There are several ways to address this difficulty, regardless of the
+data type of the exported variable:
+.Sp
+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.
+.Sp
+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:
+.Sp
+.Vb 3
+\& extern type extern_array[];
+\& extern_array[1] \-\->
+\& { volatile type *t=extern_array; t[1] }
+.Ve
+.Sp
+or
+.Sp
+.Vb 3
+\& extern type extern_array[];
+\& extern_array[1] \-\->
+\& { volatile int t=1; extern_array[t] }
+.Ve
+.Sp
+For structs (and most other multiword data types) the only option
+is to make the struct itself (or the long long, or the ...) variable:
+.Sp
+.Vb 3
+\& extern struct s extern_struct;
+\& extern_struct.field \-\->
+\& { volatile struct s *t=&extern_struct; t\->field }
+.Ve
+.Sp
+or
+.Sp
+.Vb 3
+\& extern long long extern_ll;
+\& extern_ll \-\->
+\& { volatile long long * local_ll=&extern_ll; *local_ll }
+.Ve
+.Sp
+A third method of dealing with this difficulty is to abandon
+\&'auto\-import' for the offending symbol and mark it with
+\&\f(CW\*(C`_\|_declspec(dllimport)\*(C'\fR. However, in practise that
+requires using compile-time #defines to indicate whether you are
+building a \s-1DLL\s0, building client code that will link to the \s-1DLL\s0, 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:
+.Sp
+Original:
+.Sp
+.Vb 7
+\& \-\-foo.h
+\& extern int arr[];
+\& \-\-foo.c
+\& #include "foo.h"
+\& void main(int argc, char **argv){
+\& printf("%d\en",arr[1]);
+\& }
+.Ve
+.Sp
+Solution 1:
+.Sp
+.Vb 9
+\& \-\-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\en",parr[1]);
+\& }
+.Ve
+.Sp
+Solution 2:
+.Sp
+.Vb 14
+\& \-\-foo.h
+\& /* Note: auto\-export is assumed (no __declspec(dllexport)) */
+\& #if (defined(_WIN32) || defined(__CYGWIN__)) && \e
+\& !(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\en",arr[1]);
+\& }
+.Ve
+.Sp
+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. \fIset_foo()\fR and \fIget_foo()\fR accessor
+functions).
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-disable\-auto\-import\fR" 4
+.IX Item "--disable-auto-import"
+Do not attempt to do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to
+\&\f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for \s-1DATA\s0 imports from DLLs.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-runtime\-pseudo\-reloc\fR" 4
+.IX Item "--enable-runtime-pseudo-reloc"
+If your code contains expressions described in \-\-enable\-auto\-import section,
+that is, \s-1DATA\s0 imports from \s-1DLL\s0 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 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-disable\-runtime\-pseudo\-reloc\fR" 4
+.IX Item "--disable-runtime-pseudo-reloc"
+Do not create pseudo relocations for non-zero offset \s-1DATA\s0 imports from
+DLLs. This is the default.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-extra\-pe\-debug\fR" 4
+.IX Item "--enable-extra-pe-debug"
+Show additional debug info related to auto-import symbol thunking.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-section\-alignment\fR" 4
+.IX 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 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-stack\fR \fIreserve\fR" 4
+.IX Item "--stack reserve"
+.PD 0
+.IP "\fB\-\-stack\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
+.IX Item "--stack reserve,commit"
+.PD
+Specify the amount of memory to reserve (and optionally commit) to be
+used as stack for this program. The default is 2Mb reserved, 4K
+committed.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-subsystem\fR \fIwhich\fR" 4
+.IX Item "--subsystem which"
+.PD 0
+.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR" 4
+.IX Item "--subsystem which:major"
+.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR\fB.\fR\fIminor\fR" 4
+.IX Item "--subsystem which:major.minor"
+.PD
+Specifies the subsystem under which your program will execute. The
+legal values for \fIwhich\fR are \f(CW\*(C`native\*(C'\fR, \f(CW\*(C`windows\*(C'\fR,
+\&\f(CW\*(C`console\*(C'\fR, \f(CW\*(C`posix\*(C'\fR, and \f(CW\*(C`xbox\*(C'\fR. You may optionally set
+the subsystem version also. Numeric values are also accepted for
+\&\fIwhich\fR.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.PP
+The 68HC11 and 68HC12 linkers support specific options to control the
+memory bank switching mapping and trampoline code generation.
+.IP "\fB\-\-no\-trampoline\fR" 4
+.IX 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 \f(CW\*(C`jsr\*(C'\fR
+instruction (this happens when a pointer to a far function is taken).
+.IP "\fB\-\-bank\-window\fR \fIname\fR" 4
+.IX Item "--bank-window name"
+This option indicates to the linker the name of the memory region in
+the \fB\s-1MEMORY\s0\fR 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.
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+You can change the behaviour of \fBld\fR with the environment variables
+\&\f(CW\*(C`GNUTARGET\*(C'\fR,
+\&\f(CW\*(C`LDEMULATION\*(C'\fR and \f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR.
+.PP
+\&\f(CW\*(C`GNUTARGET\*(C'\fR determines the input-file object format if you don't
+use \fB\-b\fR (or its synonym \fB\-\-format\fR). Its value should be one
+of the \s-1BFD\s0 names for an input format. If there is no
+\&\f(CW\*(C`GNUTARGET\*(C'\fR in the environment, \fBld\fR uses the natural format
+of the target. If \f(CW\*(C`GNUTARGET\*(C'\fR is set to \f(CW\*(C`default\*(C'\fR then \s-1BFD\s0
+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
+\&\s-1BFD\s0 on each system places the conventional format for that system first
+in the search\-list, so ambiguities are resolved in favor of convention.
+.PP
+\&\f(CW\*(C`LDEMULATION\*(C'\fR determines the default emulation if you don't use the
+\&\fB\-m\fR option. The emulation can affect various aspects of linker
+behaviour, particularly the default linker script. You can list the
+available emulations with the \fB\-\-verbose\fR or \fB\-V\fR options. If
+the \fB\-m\fR option is not used, and the \f(CW\*(C`LDEMULATION\*(C'\fR environment
+variable is not defined, the default emulation depends upon how the
+linker was configured.
+.PP
+Normally, the linker will default to demangling symbols. However, if
+\&\f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR is set in the environment, then it will
+default to not demangling symbols. This environment variable is used in
+a similar fashion by the \f(CW\*(C`gcc\*(C'\fR linker wrapper program. The default
+may be overridden by the \fB\-\-demangle\fR and \fB\-\-no\-demangle\fR
+options.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjcopy\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1) and
+the Info entries for \fIbinutils\fR and
+\&\fIld\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001,
+2002, 2003, 2004 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1
+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 \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/binutils-2.17/ld/ld.h b/binutils-2.17/ld/ld.h
new file mode 100644
index 00000000..e1aa62cc
--- /dev/null
+++ b/binutils-2.17/ld/ld.h
@@ -0,0 +1,297 @@
+/* ld.h -- general linker header file
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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 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
+
+#if defined(__GNUC__) && !defined(C_ALLOCA)
+# undef alloca
+# define alloca __builtin_alloca
+#else
+# if defined(HAVE_ALLOCA_H) && !defined(C_ALLOCA)
+# include <alloca.h>
+# else
+# ifndef alloca /* predefined by HP cc +Olibcalls */
+# if !defined (__STDC__) && !defined (__hpux)
+char *alloca ();
+# else
+void *alloca ();
+# endif /* __STDC__, __hpux */
+# endif /* alloca */
+# endif /* HAVE_ALLOCA_H */
+#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
+
+#include "bin-bugs.h"
+
+/* 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;
+
+/* 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;
+} 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)
+
+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;
+ bfd_boolean relax;
+
+ /* 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;
+
+ /* Big or little endian as set on command line. */
+ enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE } endian;
+
+ /* 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;
+
+ /* 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;
+
+ /* If TRUE (the default) check section addresses, once compute,
+ fpor overlaps. */
+ bfd_boolean 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;
+
+ /* If TRUE reduce memory overheads, at the expense of speed.
+ This will cause map file generation to use an O(N^2) algorithm. */
+ bfd_boolean reduce_memory_overheads;
+
+} args_type;
+
+extern args_type command_line;
+
+typedef int token_code_type;
+
+typedef struct {
+ bfd_size_type specified_data_size;
+ 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;
+
+ bfd_boolean sort_common;
+
+ bfd_boolean text_read_only;
+
+ char *map_filename;
+ FILE *map_file;
+
+ bfd_boolean stats;
+
+ /* If set, orphan input sections will be mapped to separate output
+ sections. */
+ bfd_boolean unique_orphan_sections;
+
+ unsigned int split_by_reloc;
+ bfd_size_type split_by_file;
+
+ /* If set, only search library directories explicitly selected
+ on the command line. */
+ bfd_boolean only_cmd_line_lib_dirs;
+
+ /* The size of the hash table to use. */
+ bfd_size_type hash_table_size;
+} 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 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.17/ld/ld.info b/binutils-2.17/ld/ld.info
new file mode 100644
index 00000000..56eee984
--- /dev/null
+++ b/binutils-2.17/ld/ld.info
@@ -0,0 +1,6691 @@
+This is .././ld/ld.info, produced by makeinfo version 4.8 from
+.././ld/ld.texinfo.
+
+START-INFO-DIR-ENTRY
+* Ld: (ld). The GNU linker.
+END-INFO-DIR-ENTRY
+
+ This file documents the GNU linker LD version 2.17.
+
+ Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001,
+2002, 2003, 2004 Free Software Foundation, Inc.
+
+
+File: ld.info, Node: Top, Next: Overview, Up: (dir)
+
+Using ld
+********
+
+This file documents the GNU linker ld version 2.17.
+
+ This document is distributed under the terms of the GNU Free
+Documentation License. A copy of the license is included in the
+section entitled "GNU Free Documentation License".
+
+* Menu:
+
+* Overview:: Overview
+* Invocation:: Invocation
+* Scripts:: Linker Scripts
+
+* Machine Dependent:: Machine Dependent Features
+
+* BFD:: BFD
+
+* Reporting Bugs:: Reporting Bugs
+* MRI:: MRI Compatible Script Files
+* GNU Free Documentation License:: GNU Free Documentation License
+* Index:: Index
+
+
+File: ld.info, Node: Overview, Next: Invocation, Prev: Top, Up: Top
+
+1 Overview
+**********
+
+`ld' combines a number of object and archive files, relocates their
+data and ties up symbol references. Usually the last step in compiling
+a program is to run `ld'.
+
+ `ld' accepts Linker Command Language files written in a superset of
+AT&T's Link Editor Command Language syntax, to provide explicit and
+total control over the linking process.
+
+ This version of `ld' uses the general purpose BFD libraries to
+operate on object files. This allows `ld' to read, combine, and write
+object files in many different formats--for example, COFF or `a.out'.
+Different formats may be linked together to produce any available kind
+of object file. *Note BFD::, for more information.
+
+ Aside from its flexibility, the GNU linker is more helpful than other
+linkers in providing diagnostic information. Many linkers abandon
+execution immediately upon encountering an error; whenever possible,
+`ld' continues executing, allowing you to identify other errors (or, in
+some cases, to get an output file in spite of the error).
+
+
+File: ld.info, Node: Invocation, Next: Scripts, Prev: Overview, Up: Top
+
+2 Invocation
+************
+
+The GNU linker `ld' is meant to cover a broad range of situations, and
+to be as compatible as possible with other linkers. As a result, you
+have many choices to control its behavior.
+
+* Menu:
+
+* Options:: Command Line Options
+* Environment:: Environment Variables
+
+
+File: ld.info, Node: Options, Next: Environment, Up: Invocation
+
+2.1 Command Line Options
+========================
+
+ The linker supports a plethora of command-line options, but in actual
+practice few of them are used in any particular context. For instance,
+a frequent use of `ld' is to link standard Unix object files on a
+standard, supported Unix system. On such a system, to link a file
+`hello.o':
+
+ ld -o OUTPUT /lib/crt0.o hello.o -lc
+
+ This tells `ld' to produce a file called OUTPUT as the result of
+linking the file `/lib/crt0.o' with `hello.o' and the library `libc.a',
+which will come from the standard search directories. (See the
+discussion of the `-l' option below.)
+
+ Some of the command-line options to `ld' may be specified at any
+point in the command line. However, options which refer to files, such
+as `-l' or `-T', cause the file to be read at the point at which the
+option appears in the command line, relative to the object files and
+other file options. Repeating non-file options with a different
+argument will either have no further effect, or override prior
+occurrences (those further to the left on the command line) of that
+option. Options which may be meaningfully specified more than once are
+noted in the descriptions below.
+
+ Non-option arguments are object files or archives which are to be
+linked together. They may follow, precede, or be mixed in with
+command-line options, except that an object file argument may not be
+placed between an option and its argument.
+
+ Usually the linker is invoked with at least one object file, but you
+can specify other forms of binary input files using `-l', `-R', and the
+script command language. If _no_ binary input files at all are
+specified, the linker does not produce any output, and issues the
+message `No input files'.
+
+ If the linker cannot recognize the format of an object file, it will
+assume that it is a linker script. A script specified in this way
+augments the main linker script used for the link (either the default
+linker script or the one specified by using `-T'). This feature
+permits the linker to link against a file which appears to be an object
+or an archive, but actually merely defines some symbol values, or uses
+`INPUT' or `GROUP' to load other objects. Note that specifying a
+script in this way merely augments the main linker script; use the `-T'
+option to replace the default linker script entirely. *Note Scripts::.
+
+ For options whose names are a single letter, option arguments must
+either follow the option letter without intervening whitespace, or be
+given as separate arguments immediately following the option that
+requires them.
+
+ For options whose names are multiple letters, either one dash or two
+can precede the option name; for example, `-trace-symbol' and
+`--trace-symbol' are equivalent. Note--there is one exception to this
+rule. Multiple letter options that start with a lower case 'o' can
+only be preceeded by two dashes. This is to reduce confusion with the
+`-o' option. So for example `-omagic' sets the output file name to
+`magic' whereas `--omagic' sets the NMAGIC flag on the output.
+
+ Arguments to multiple-letter options must either be separated from
+the option name by an equals sign, or be given as separate arguments
+immediately following the option that requires them. For example,
+`--trace-symbol foo' and `--trace-symbol=foo' are equivalent. Unique
+abbreviations of the names of multiple-letter options are accepted.
+
+ Note--if the linker is being invoked indirectly, via a compiler
+driver (e.g. `gcc') then all the linker command line options should be
+prefixed by `-Wl,' (or whatever is appropriate for the particular
+compiler driver) like this:
+
+ gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup
+
+ This is important, because otherwise the compiler driver program may
+silently drop the linker options, resulting in a bad link.
+
+ Here is a table of the generic command line switches accepted by the
+GNU linker:
+
+`@FILE'
+ Read command-line options from FILE. The options read are
+ inserted in place of the original @FILE option. If FILE does not
+ exist, or cannot be read, then the option will be treated
+ literally, and not removed.
+
+ Options in FILE are separated by whitespace. A whitespace
+ character may be included in an option by surrounding the entire
+ option in either single or double quotes. Any character
+ (including a backslash) may be included by prefixing the character
+ to be included with a backslash. The FILE may itself contain
+ additional @FILE options; any such options will be processed
+ recursively.
+
+`-aKEYWORD'
+ This option is supported for HP/UX compatibility. The KEYWORD
+ argument must be one of the strings `archive', `shared', or
+ `default'. `-aarchive' is functionally equivalent to `-Bstatic',
+ and the other two keywords are functionally equivalent to
+ `-Bdynamic'. This option may be used any number of times.
+
+`-AARCHITECTURE'
+`--architecture=ARCHITECTURE'
+ In the current release of `ld', this option is useful only for the
+ Intel 960 family of architectures. In that `ld' configuration, the
+ ARCHITECTURE argument identifies the particular architecture in
+ the 960 family, enabling some safeguards and modifying the
+ archive-library search path. *Note `ld' and the Intel 960 family:
+ i960, for details.
+
+ Future releases of `ld' may support similar functionality for
+ other architecture families.
+
+`-b INPUT-FORMAT'
+`--format=INPUT-FORMAT'
+ `ld' may be configured to support more than one kind of object
+ file. If your `ld' is configured this way, you can use the `-b'
+ option to specify the binary format for input object files that
+ follow this option on the command line. Even when `ld' is
+ configured to support alternative object formats, you don't
+ usually need to specify this, as `ld' should be configured to
+ expect as a default input format the most usual format on each
+ machine. INPUT-FORMAT is a text string, the name of a particular
+ format supported by the BFD libraries. (You can list the
+ available binary formats with `objdump -i'.) *Note BFD::.
+
+ You may want to use this option if you are linking files with an
+ unusual binary format. You can also use `-b' to switch formats
+ explicitly (when linking object files of different formats), by
+ including `-b INPUT-FORMAT' before each group of object files in a
+ particular format.
+
+ The default format is taken from the environment variable
+ `GNUTARGET'. *Note Environment::. You can also define the input
+ format from a script, using the command `TARGET'; see *Note Format
+ Commands::.
+
+`-c MRI-COMMANDFILE'
+`--mri-script=MRI-COMMANDFILE'
+ For compatibility with linkers produced by MRI, `ld' accepts script
+ files written in an alternate, restricted command language,
+ described in *Note MRI Compatible Script Files: MRI. Introduce
+ MRI script files with the option `-c'; use the `-T' option to run
+ linker scripts written in the general-purpose `ld' scripting
+ language. If MRI-CMDFILE does not exist, `ld' looks for it in the
+ directories specified by any `-L' options.
+
+`-d'
+`-dc'
+`-dp'
+ These three options are equivalent; multiple forms are supported
+ for compatibility with other linkers. They assign space to common
+ symbols even if a relocatable output file is specified (with
+ `-r'). The script command `FORCE_COMMON_ALLOCATION' has the same
+ effect. *Note Miscellaneous Commands::.
+
+`-e ENTRY'
+`--entry=ENTRY'
+ Use ENTRY as the explicit symbol for beginning execution of your
+ program, rather than the default entry point. If there is no
+ symbol named ENTRY, the linker will try to parse ENTRY as a number,
+ and use that as the entry address (the number will be interpreted
+ in base 10; you may use a leading `0x' for base 16, or a leading
+ `0' for base 8). *Note Entry Point::, for a discussion of defaults
+ and other ways of specifying the entry point.
+
+`--exclude-libs LIB,LIB,...'
+ Specifies a list of archive libraries from which symbols should
+ not be automatically exported. The library names may be delimited
+ by commas or colons. Specifying `--exclude-libs ALL' excludes
+ symbols in all archive libraries from automatic export. This
+ option is available only for the i386 PE targeted port of the
+ linker and for ELF targeted ports. For i386 PE, symbols
+ explicitly listed in a .def file are still exported, regardless of
+ this option. For ELF targeted ports, symbols affected by this
+ option will be treated as hidden.
+
+`-E'
+`--export-dynamic'
+ When creating a dynamically linked executable, add all symbols to
+ the dynamic symbol table. The dynamic symbol table is the set of
+ symbols which are visible from dynamic objects at run time.
+
+ If you do not use this option, the dynamic symbol table will
+ normally contain only those symbols which are referenced by some
+ dynamic object mentioned in the link.
+
+ If you use `dlopen' to load a dynamic object which needs to refer
+ back to the symbols defined by the program, rather than some other
+ dynamic object, then you will probably need to use this option when
+ linking the program itself.
+
+ You can also use the version script to control what symbols should
+ be added to the dynamic symbol table if the output format supports
+ it. See the description of `--version-script' in *Note VERSION::.
+
+`-EB'
+ Link big-endian objects. This affects the default output format.
+
+`-EL'
+ Link little-endian objects. This affects the default output
+ format.
+
+`-f'
+`--auxiliary NAME'
+ When creating an ELF shared object, set the internal DT_AUXILIARY
+ field to the specified name. This tells the dynamic linker that
+ the symbol table of the shared object should be used as an
+ auxiliary filter on the symbol table of the shared object NAME.
+
+ If you later link a program against this filter object, then, when
+ you run the program, the dynamic linker will see the DT_AUXILIARY
+ field. If the dynamic linker resolves any symbols from the filter
+ object, it will first check whether there is a definition in the
+ shared object NAME. If there is one, it will be used instead of
+ the definition in the filter object. The shared object NAME need
+ not exist. Thus the shared object NAME may be used to provide an
+ alternative implementation of certain functions, perhaps for
+ debugging or for machine specific performance.
+
+ This option may be specified more than once. The DT_AUXILIARY
+ entries will be created in the order in which they appear on the
+ command line.
+
+`-F NAME'
+`--filter NAME'
+ When creating an ELF shared object, set the internal DT_FILTER
+ field to the specified name. This tells the dynamic linker that
+ the symbol table of the shared object which is being created
+ should be used as a filter on the symbol table of the shared
+ object NAME.
+
+ If you later link a program against this filter object, then, when
+ you run the program, the dynamic linker will see the DT_FILTER
+ field. The dynamic linker will resolve symbols according to the
+ symbol table of the filter object as usual, but it will actually
+ link to the definitions found in the shared object NAME. Thus the
+ filter object can be used to select a subset of the symbols
+ provided by the object NAME.
+
+ Some older linkers used the `-F' option throughout a compilation
+ toolchain for specifying object-file format for both input and
+ output object files. The GNU linker uses other mechanisms for
+ this purpose: the `-b', `--format', `--oformat' options, the
+ `TARGET' command in linker scripts, and the `GNUTARGET'
+ environment variable. The GNU linker will ignore the `-F' option
+ when not creating an ELF shared object.
+
+`-fini NAME'
+ When creating an ELF executable or shared object, call NAME when
+ the executable or shared object is unloaded, by setting DT_FINI to
+ the address of the function. By default, the linker uses `_fini'
+ as the function to call.
+
+`-g'
+ Ignored. Provided for compatibility with other tools.
+
+`-GVALUE'
+`--gpsize=VALUE'
+ Set the maximum size of objects to be optimized using the GP
+ register to SIZE. This is only meaningful for object file formats
+ such as MIPS ECOFF which supports putting large and small objects
+ into different sections. This is ignored for other object file
+ formats.
+
+`-hNAME'
+`-soname=NAME'
+ When creating an ELF shared object, set the internal DT_SONAME
+ field to the specified name. When an executable is linked with a
+ shared object which has a DT_SONAME field, then when the
+ executable is run the dynamic linker will attempt to load the
+ shared object specified by the DT_SONAME field rather than the
+ using the file name given to the linker.
+
+`-i'
+ Perform an incremental link (same as option `-r').
+
+`-init NAME'
+ When creating an ELF executable or shared object, call NAME when
+ the executable or shared object is loaded, by setting DT_INIT to
+ the address of the function. By default, the linker uses `_init'
+ as the function to call.
+
+`-lARCHIVE'
+`--library=ARCHIVE'
+ Add archive file ARCHIVE to the list of files to link. This
+ option may be used any number of times. `ld' will search its
+ path-list for occurrences of `libARCHIVE.a' for every ARCHIVE
+ specified.
+
+ On systems which support shared libraries, `ld' may also search for
+ libraries with extensions other than `.a'. Specifically, on ELF
+ and SunOS systems, `ld' will search a directory for a library with
+ an extension of `.so' before searching for one with an extension of
+ `.a'. By convention, a `.so' extension indicates a shared library.
+
+ The linker will search an archive only once, at the location where
+ it is specified on the command line. If the archive defines a
+ symbol which was undefined in some object which appeared before
+ the archive on the command line, the linker will include the
+ appropriate file(s) from the archive. However, an undefined
+ symbol in an object appearing later on the command line will not
+ cause the linker to search the archive again.
+
+ See the `-(' option for a way to force the linker to search
+ archives multiple times.
+
+ You may list the same archive multiple times on the command line.
+
+ This type of archive searching is standard for Unix linkers.
+ However, if you are using `ld' on AIX, note that it is different
+ from the behaviour of the AIX linker.
+
+`-LSEARCHDIR'
+`--library-path=SEARCHDIR'
+ Add path SEARCHDIR to the list of paths that `ld' will search for
+ archive libraries and `ld' control scripts. You may use this
+ option any number of times. The directories are searched in the
+ order in which they are specified on the command line.
+ Directories specified on the command line are searched before the
+ default directories. All `-L' options apply to all `-l' options,
+ regardless of the order in which the options appear.
+
+ If SEARCHDIR begins with `=', then the `=' will be replaced by the
+ "sysroot prefix", a path specified when the linker is configured.
+
+ The default set of paths searched (without being specified with
+ `-L') depends on which emulation mode `ld' is using, and in some
+ cases also on how it was configured. *Note Environment::.
+
+ The paths can also be specified in a link script with the
+ `SEARCH_DIR' command. Directories specified this way are searched
+ at the point in which the linker script appears in the command
+ line.
+
+`-mEMULATION'
+ Emulate the EMULATION linker. You can list the available
+ emulations with the `--verbose' or `-V' options.
+
+ If the `-m' option is not used, the emulation is taken from the
+ `LDEMULATION' environment variable, if that is defined.
+
+ Otherwise, the default emulation depends upon how the linker was
+ configured.
+
+`-M'
+`--print-map'
+ Print a link map to the standard output. A link map provides
+ information about the link, including the following:
+
+ * Where object files are mapped into memory.
+
+ * How common symbols are allocated.
+
+ * All archive members included in the link, with a mention of
+ the symbol which caused the archive member to be brought in.
+
+ * The values assigned to symbols.
+
+ Note - symbols whose values are computed by an expression
+ which involves a reference to a previous value of the same
+ symbol may not have correct result displayed in the link map.
+ This is because the linker discards intermediate results and
+ only retains the final value of an expression. Under such
+ circumstances the linker will display the final value
+ enclosed by square brackets. Thus for example a linker
+ script containing:
+
+ foo = 1
+ foo = foo * 4
+ foo = foo + 8
+
+ will produce the following output in the link map if the `-M'
+ option is used:
+
+ 0x00000001 foo = 0x1
+ [0x0000000c] foo = (foo * 0x4)
+ [0x0000000c] foo = (foo + 0x8)
+
+ See *Note Expressions:: for more information about
+ expressions in linker scripts.
+
+`-n'
+`--nmagic'
+ Turn off page alignment of sections, and mark the output as
+ `NMAGIC' if possible.
+
+`-N'
+`--omagic'
+ Set the text and data sections to be readable and writable. Also,
+ do not page-align the data segment, and disable linking against
+ shared libraries. If the output format supports Unix style magic
+ numbers, mark the output as `OMAGIC'. Note: Although a writable
+ text section is allowed for PE-COFF targets, it does not conform
+ to the format specification published by Microsoft.
+
+`--no-omagic'
+ This option negates most of the effects of the `-N' option. It
+ sets the text section to be read-only, and forces the data segment
+ to be page-aligned. Note - this option does not enable linking
+ against shared libraries. Use `-Bdynamic' for this.
+
+`-o OUTPUT'
+`--output=OUTPUT'
+ Use OUTPUT as the name for the program produced by `ld'; if this
+ option is not specified, the name `a.out' is used by default. The
+ script command `OUTPUT' can also specify the output file name.
+
+`-O LEVEL'
+ If LEVEL is a numeric values greater than zero `ld' optimizes the
+ output. This might take significantly longer and therefore
+ probably should only be enabled for the final binary.
+
+`-q'
+`--emit-relocs'
+ Leave relocation sections and contents in fully linked
+ exececutables. Post link analysis and optimization tools may need
+ this information in order to perform correct modifications of
+ executables. This results in larger executables.
+
+ This option is currently only supported on ELF platforms.
+
+`--force-dynamic'
+ Force the output file to have dynamic sections. This option is
+ specific to VxWorks targets.
+
+`-r'
+`--relocatable'
+ Generate relocatable output--i.e., generate an output file that
+ can in turn serve as input to `ld'. This is often called "partial
+ linking". As a side effect, in environments that support standard
+ Unix magic numbers, this option also sets the output file's magic
+ number to `OMAGIC'. If this option is not specified, an absolute
+ file is produced. When linking C++ programs, this option _will
+ not_ resolve references to constructors; to do that, use `-Ur'.
+
+ When an input file does not have the same format as the output
+ file, partial linking is only supported if that input file does
+ not contain any relocations. Different output formats can have
+ further restrictions; for example some `a.out'-based formats do
+ not support partial linking with input files in other formats at
+ all.
+
+ This option does the same thing as `-i'.
+
+`-R FILENAME'
+`--just-symbols=FILENAME'
+ Read symbol names and their addresses from FILENAME, but do not
+ relocate it or include it in the output. This allows your output
+ file to refer symbolically to absolute locations of memory defined
+ in other programs. You may use this option more than once.
+
+ For compatibility with other ELF linkers, if the `-R' option is
+ followed by a directory name, rather than a file name, it is
+ treated as the `-rpath' option.
+
+`-s'
+`--strip-all'
+ Omit all symbol information from the output file.
+
+`-S'
+`--strip-debug'
+ Omit debugger symbol information (but not all symbols) from the
+ output file.
+
+`-t'
+`--trace'
+ Print the names of the input files as `ld' processes them.
+
+`-T SCRIPTFILE'
+`--script=SCRIPTFILE'
+ Use SCRIPTFILE as the linker script. This script replaces `ld''s
+ default linker script (rather than adding to it), so COMMANDFILE
+ must specify everything necessary to describe the output file.
+ *Note Scripts::. If SCRIPTFILE does not exist in the current
+ directory, `ld' looks for it in the directories specified by any
+ preceding `-L' options. Multiple `-T' options accumulate.
+
+`-u SYMBOL'
+`--undefined=SYMBOL'
+ Force SYMBOL to be entered in the output file as an undefined
+ symbol. Doing this may, for example, trigger linking of additional
+ modules from standard libraries. `-u' may be repeated with
+ different option arguments to enter additional undefined symbols.
+ This option is equivalent to the `EXTERN' linker script command.
+
+`-Ur'
+ For anything other than C++ programs, this option is equivalent to
+ `-r': it generates relocatable output--i.e., an output file that
+ can in turn serve as input to `ld'. When linking C++ programs,
+ `-Ur' _does_ resolve references to constructors, unlike `-r'. It
+ does not work to use `-Ur' on files that were themselves linked
+ with `-Ur'; once the constructor table has been built, it cannot
+ be added to. Use `-Ur' only for the last partial link, and `-r'
+ for the others.
+
+`--unique[=SECTION]'
+ Creates a separate output section for every input section matching
+ SECTION, or if the optional wildcard SECTION argument is missing,
+ for every orphan input section. An orphan section is one not
+ specifically mentioned in a linker script. You may use this option
+ multiple times on the command line; It prevents the normal
+ merging of input sections with the same name, overriding output
+ section assignments in a linker script.
+
+`-v'
+`--version'
+`-V'
+ Display the version number for `ld'. The `-V' option also lists
+ the supported emulations.
+
+`-x'
+`--discard-all'
+ Delete all local symbols.
+
+`-X'
+`--discard-locals'
+ Delete all temporary local symbols. For most targets, this is all
+ local symbols whose names begin with `L'.
+
+`-y SYMBOL'
+`--trace-symbol=SYMBOL'
+ Print the name of each linked file in which SYMBOL appears. This
+ option may be given any number of times. On many systems it is
+ necessary to prepend an underscore.
+
+ This option is useful when you have an undefined symbol in your
+ link but don't know where the reference is coming from.
+
+`-Y PATH'
+ Add PATH to the default library search path. This option exists
+ for Solaris compatibility.
+
+`-z KEYWORD'
+ The recognized keywords are:
+ `combreloc'
+ Combines multiple reloc sections and sorts them to make
+ dynamic symbol lookup caching possible.
+
+ `defs'
+ Disallows undefined symbols in object files. Undefined
+ symbols in shared libraries are still allowed.
+
+ `execstack'
+ Marks the object as requiring executable stack.
+
+ `initfirst'
+ This option is only meaningful when building a shared object.
+ It marks the object so that its runtime initialization will
+ occur before the runtime initialization of any other objects
+ brought into the process at the same time. Similarly the
+ runtime finalization of the object will occur after the
+ runtime finalization of any other objects.
+
+ `interpose'
+ Marks the object that its symbol table interposes before all
+ symbols but the primary executable.
+
+ `loadfltr'
+ Marks the object that its filters be processed immediately at
+ runtime.
+
+ `muldefs'
+ Allows multiple definitions.
+
+ `nocombreloc'
+ Disables multiple reloc sections combining.
+
+ `nocopyreloc'
+ Disables production of copy relocs.
+
+ `nodefaultlib'
+ Marks the object that the search for dependencies of this
+ object will ignore any default library search paths.
+
+ `nodelete'
+ Marks the object shouldn't be unloaded at runtime.
+
+ `nodlopen'
+ Marks the object not available to `dlopen'.
+
+ `nodump'
+ Marks the object can not be dumped by `dldump'.
+
+ `noexecstack'
+ Marks the object as not requiring executable stack.
+
+ `norelro'
+ Don't create an ELF `PT_GNU_RELRO' segment header in the
+ object.
+
+ `now'
+ When generating an executable or shared library, mark it to
+ tell the dynamic linker to resolve all symbols when the
+ program is started, or when the shared library is linked to
+ using dlopen, instead of deferring function call resolution
+ to the point when the function is first called.
+
+ `origin'
+ Marks the object may contain $ORIGIN.
+
+ `relro'
+ Create an ELF `PT_GNU_RELRO' segment header in the object.
+
+
+ Other keywords are ignored for Solaris compatibility.
+
+`-( ARCHIVES -)'
+`--start-group ARCHIVES --end-group'
+ The ARCHIVES should be a list of archive files. They may be
+ either explicit file names, or `-l' options.
+
+ The specified archives are searched repeatedly until no new
+ undefined references are created. Normally, an archive is
+ searched only once in the order that it is specified on the
+ command line. If a symbol in that archive is needed to resolve an
+ undefined symbol referred to by an object in an archive that
+ appears later on the command line, the linker would not be able to
+ resolve that reference. By grouping the archives, they all be
+ searched repeatedly until all possible references are resolved.
+
+ Using this option has a significant performance cost. It is best
+ to use it only when there are unavoidable circular references
+ between two or more archives.
+
+`--accept-unknown-input-arch'
+`--no-accept-unknown-input-arch'
+ Tells the linker to accept input files whose architecture cannot be
+ recognised. The assumption is that the user knows what they are
+ doing and deliberately wants to link in these unknown input files.
+ This was the default behaviour of the linker, before release
+ 2.14. The default behaviour from release 2.14 onwards is to
+ reject such input files, and so the `--accept-unknown-input-arch'
+ option has been added to restore the old behaviour.
+
+`--as-needed'
+`--no-as-needed'
+ This option affects ELF DT_NEEDED tags for dynamic libraries
+ mentioned on the command line after the `--as-needed' option.
+ Normally, the linker will add a DT_NEEDED tag for each dynamic
+ library mentioned on the command line, regardless of whether the
+ library is actually needed. `--as-needed' causes DT_NEEDED tags
+ to only be emitted for libraries that satisfy some symbol
+ reference from regular objects which is undefined at the point
+ that the library was linked. `--no-as-needed' restores the
+ default behaviour.
+
+`--add-needed'
+`--no-add-needed'
+ This option affects the treatment of dynamic libraries from ELF
+ DT_NEEDED tags in dynamic libraries mentioned on the command line
+ after the `--no-add-needed' option. Normally, the linker will add
+ a DT_NEEDED tag for each dynamic library from DT_NEEDED tags.
+ `--no-add-needed' causes DT_NEEDED tags will never be emitted for
+ those libraries from DT_NEEDED tags. `--add-needed' restores the
+ default behaviour.
+
+`-assert KEYWORD'
+ This option is ignored for SunOS compatibility.
+
+`-Bdynamic'
+`-dy'
+`-call_shared'
+ Link against dynamic libraries. This is only meaningful on
+ platforms for which shared libraries are supported. This option
+ is normally the default on such platforms. The different variants
+ of this option are for compatibility with various systems. You
+ may use this option multiple times on the command line: it affects
+ library searching for `-l' options which follow it.
+
+`-Bgroup'
+ Set the `DF_1_GROUP' flag in the `DT_FLAGS_1' entry in the dynamic
+ section. This causes the runtime linker to handle lookups in this
+ object and its dependencies to be performed only inside the group.
+ `--unresolved-symbols=report-all' is implied. This option is only
+ meaningful on ELF platforms which support shared libraries.
+
+`-Bstatic'
+`-dn'
+`-non_shared'
+`-static'
+ Do not link against shared libraries. This is only meaningful on
+ platforms for which shared libraries are supported. The different
+ variants of this option are for compatibility with various
+ systems. You may use this option multiple times on the command
+ line: it affects library searching for `-l' options which follow
+ it. This option also implies `--unresolved-symbols=report-all'.
+ This option can be used with `-shared'. Doing so means that a
+ shared library is being created but that all of the library's
+ external references must be resolved by pulling in entries from
+ static libraries.
+
+`-Bsymbolic'
+ When creating a shared library, bind references to global symbols
+ to the definition within the shared library, if any. Normally, it
+ is possible for a program linked against a shared library to
+ override the definition within the shared library. This option is
+ only meaningful on ELF platforms which support shared libraries.
+
+`--check-sections'
+`--no-check-sections'
+ Asks the linker _not_ to check section addresses after they have
+ been assigned to see if there are any overlaps. Normally the
+ linker will perform this check, and if it finds any overlaps it
+ will produce suitable error messages. The linker does know about,
+ and does make allowances for sections in overlays. The default
+ behaviour can be restored by using the command line switch
+ `--check-sections'.
+
+`--cref'
+ Output a cross reference table. If a linker map file is being
+ generated, the cross reference table is printed to the map file.
+ Otherwise, it is printed on the standard output.
+
+ The format of the table is intentionally simple, so that it may be
+ easily processed by a script if necessary. The symbols are
+ printed out, sorted by name. For each symbol, a list of file
+ names is given. If the symbol is defined, the first file listed
+ is the location of the definition. The remaining files contain
+ references to the symbol.
+
+`--no-define-common'
+ This option inhibits the assignment of addresses to common symbols.
+ The script command `INHIBIT_COMMON_ALLOCATION' has the same effect.
+ *Note Miscellaneous Commands::.
+
+ The `--no-define-common' option allows decoupling the decision to
+ assign addresses to Common symbols from the choice of the output
+ file type; otherwise a non-Relocatable output type forces
+ assigning addresses to Common symbols. Using `--no-define-common'
+ allows Common symbols that are referenced from a shared library to
+ be assigned addresses only in the main program. This eliminates
+ the unused duplicate space in the shared library, and also
+ prevents any possible confusion over resolving to the wrong
+ duplicate when there are many dynamic modules with specialized
+ search paths for runtime symbol resolution.
+
+`--defsym SYMBOL=EXPRESSION'
+ Create a global symbol in the output file, containing the absolute
+ address given by EXPRESSION. You may use this option as many
+ times as necessary to define multiple symbols in the command line.
+ A limited form of arithmetic is supported for the EXPRESSION in
+ this context: you may give a hexadecimal constant or the name of
+ an existing symbol, or use `+' and `-' to add or subtract
+ hexadecimal constants or symbols. If you need more elaborate
+ expressions, consider using the linker command language from a
+ script (*note Assignment: Symbol Definitions: Assignments.).
+ _Note:_ there should be no white space between SYMBOL, the equals
+ sign ("<=>"), and EXPRESSION.
+
+`--demangle[=STYLE]'
+`--no-demangle'
+ These options control whether to demangle symbol names in error
+ messages and other output. When the linker is told to demangle,
+ it tries to present symbol names in a readable fashion: it strips
+ leading underscores if they are used by the object file format,
+ and converts C++ mangled symbol names into user readable names.
+ Different compilers have different mangling styles. The optional
+ demangling style argument can be used to choose an appropriate
+ demangling style for your compiler. The linker will demangle by
+ default unless the environment variable `COLLECT_NO_DEMANGLE' is
+ set. These options may be used to override the default.
+
+`--dynamic-linker FILE'
+ Set the name of the dynamic linker. This is only meaningful when
+ generating dynamically linked ELF executables. The default dynamic
+ linker is normally correct; don't use this unless you know what
+ you are doing.
+
+`--fatal-warnings'
+ Treat all warnings as errors.
+
+`--force-exe-suffix'
+ Make sure that an output file has a .exe suffix.
+
+ If a successfully built fully linked output file does not have a
+ `.exe' or `.dll' suffix, this option forces the linker to copy the
+ output file to one of the same name with a `.exe' suffix. This
+ option is useful when using unmodified Unix makefiles on a
+ Microsoft Windows host, since some versions of Windows won't run
+ an image unless it ends in a `.exe' suffix.
+
+`--no-gc-sections'
+`--gc-sections'
+ Enable garbage collection of unused input sections. It is ignored
+ on targets that do not support this option. This option is not
+ compatible with `-r'. The default behaviour (of not performing
+ this garbage collection) can be restored by specifying
+ `--no-gc-sections' on the command line.
+
+`--help'
+ Print a summary of the command-line options on the standard output
+ and exit.
+
+`--target-help'
+ Print a summary of all target specific options on the standard
+ output and exit.
+
+`-Map MAPFILE'
+ Print a link map to the file MAPFILE. See the description of the
+ `-M' option, above.
+
+`--no-keep-memory'
+ `ld' normally optimizes for speed over memory usage by caching the
+ symbol tables of input files in memory. This option tells `ld' to
+ instead optimize for memory usage, by rereading the symbol tables
+ as necessary. This may be required if `ld' runs out of memory
+ space while linking a large executable.
+
+`--no-undefined'
+`-z defs'
+ Report unresolved symbol references from regular object files.
+ This is done even if the linker is creating a non-symbolic shared
+ library. The switch `--[no-]allow-shlib-undefined' controls the
+ behaviour for reporting unresolved references found in shared
+ libraries being linked in.
+
+`--allow-multiple-definition'
+`-z muldefs'
+ Normally when a symbol is defined multiple times, the linker will
+ report a fatal error. These options allow multiple definitions and
+ the first definition will be used.
+
+`--allow-shlib-undefined'
+`--no-allow-shlib-undefined'
+ Allows (the default) or disallows undefined symbols in shared
+ libraries. This switch is similar to `--no-undefined' except that
+ it determines the behaviour when the undefined symbols are in a
+ shared library rather than a regular object file. It does not
+ affect how undefined symbols in regular object files are handled.
+
+ The reason that `--allow-shlib-undefined' is the default is that
+ the shared library being specified at link time may not be the
+ same as the one that is available at load time, so the symbols
+ might actually be resolvable at load time. Plus there are some
+ systems, (eg BeOS) where undefined symbols in shared libraries is
+ normal. (The kernel patches them at load time to select which
+ function is most appropriate for the current architecture. This
+ is used for example to dynamically select an appropriate memset
+ function). Apparently it is also normal for HPPA shared libraries
+ to have undefined symbols.
+
+`--no-undefined-version'
+ Normally when a symbol has an undefined version, the linker will
+ ignore it. This option disallows symbols with undefined version
+ and a fatal error will be issued instead.
+
+`--default-symver'
+ Create and use a default symbol version (the soname) for
+ unversioned exported symbols.
+
+`--default-imported-symver'
+ Create and use a default symbol version (the soname) for
+ unversioned imported symbols.
+
+`--no-warn-mismatch'
+ Normally `ld' will give an error if you try to link together input
+ files that are mismatched for some reason, perhaps because they
+ have been compiled for different processors or for different
+ endiannesses. This option tells `ld' that it should silently
+ permit such possible errors. This option should only be used with
+ care, in cases when you have taken some special action that
+ ensures that the linker errors are inappropriate.
+
+`--no-whole-archive'
+ Turn off the effect of the `--whole-archive' option for subsequent
+ archive files.
+
+`--noinhibit-exec'
+ Retain the executable output file whenever it is still usable.
+ Normally, the linker will not produce an output file if it
+ encounters errors during the link process; it exits without
+ writing an output file when it issues any error whatsoever.
+
+`-nostdlib'
+ Only search library directories explicitly specified on the
+ command line. Library directories specified in linker scripts
+ (including linker scripts specified on the command line) are
+ ignored.
+
+`--oformat OUTPUT-FORMAT'
+ `ld' may be configured to support more than one kind of object
+ file. If your `ld' is configured this way, you can use the
+ `--oformat' option to specify the binary format for the output
+ object file. Even when `ld' is configured to support alternative
+ object formats, you don't usually need to specify this, as `ld'
+ should be configured to produce as a default output format the most
+ usual format on each machine. OUTPUT-FORMAT is a text string, the
+ name of a particular format supported by the BFD libraries. (You
+ can list the available binary formats with `objdump -i'.) The
+ script command `OUTPUT_FORMAT' can also specify the output format,
+ but this option overrides it. *Note BFD::.
+
+`-pie'
+`--pic-executable'
+ Create a position independent executable. This is currently only
+ supported on ELF platforms. Position independent executables are
+ similar to shared libraries in that they are relocated by the
+ dynamic linker to the virtual address the OS chooses for them
+ (which can vary between invocations). Like normal dynamically
+ linked executables they can be executed and symbols defined in the
+ executable cannot be overridden by shared libraries.
+
+`-qmagic'
+ This option is ignored for Linux compatibility.
+
+`-Qy'
+ This option is ignored for SVR4 compatibility.
+
+`--relax'
+ An option with machine dependent effects. This option is only
+ supported on a few targets. *Note `ld' and the H8/300: H8/300.
+ *Note `ld' and the Intel 960 family: i960. *Note `ld' and Xtensa
+ Processors: Xtensa. *Note `ld' and PowerPC 32-bit ELF Support:
+ PowerPC ELF32.
+
+ On some platforms, the `--relax' option performs global
+ optimizations that become possible when the linker resolves
+ addressing in the program, such as relaxing address modes and
+ synthesizing new instructions in the output object file.
+
+ On some platforms these link time global optimizations may make
+ symbolic debugging of the resulting executable impossible. This
+ is known to be the case for the Matsushita MN10200 and MN10300
+ family of processors.
+
+ On platforms where this is not supported, `--relax' is accepted,
+ but ignored.
+
+`--retain-symbols-file FILENAME'
+ Retain _only_ the symbols listed in the file FILENAME, discarding
+ all others. FILENAME is simply a flat file, with one symbol name
+ per line. This option is especially useful in environments (such
+ as VxWorks) where a large global symbol table is accumulated
+ gradually, to conserve run-time memory.
+
+ `--retain-symbols-file' does _not_ discard undefined symbols, or
+ symbols needed for relocations.
+
+ You may only specify `--retain-symbols-file' once in the command
+ line. It overrides `-s' and `-S'.
+
+`-rpath DIR'
+ Add a directory to the runtime library search path. This is used
+ when linking an ELF executable with shared objects. All `-rpath'
+ arguments are concatenated and passed to the runtime linker, which
+ uses them to locate shared objects at runtime. The `-rpath'
+ option is also used when locating shared objects which are needed
+ by shared objects explicitly included in the link; see the
+ description of the `-rpath-link' option. If `-rpath' is not used
+ when linking an ELF executable, the contents of the environment
+ variable `LD_RUN_PATH' will be used if it is defined.
+
+ The `-rpath' option may also be used on SunOS. By default, on
+ SunOS, the linker will form a runtime search patch out of all the
+ `-L' options it is given. If a `-rpath' option is used, the
+ runtime search path will be formed exclusively using the `-rpath'
+ options, ignoring the `-L' options. This can be useful when using
+ gcc, which adds many `-L' options which may be on NFS mounted
+ filesystems.
+
+ For compatibility with other ELF linkers, if the `-R' option is
+ followed by a directory name, rather than a file name, it is
+ treated as the `-rpath' option.
+
+`-rpath-link DIR'
+ When using ELF or SunOS, one shared library may require another.
+ This happens when an `ld -shared' link includes a shared library
+ as one of the input files.
+
+ When the linker encounters such a dependency when doing a
+ non-shared, non-relocatable link, it will automatically try to
+ locate the required shared library and include it in the link, if
+ it is not included explicitly. In such a case, the `-rpath-link'
+ option specifies the first set of directories to search. The
+ `-rpath-link' option may specify a sequence of directory names
+ either by specifying a list of names separated by colons, or by
+ appearing multiple times.
+
+ This option should be used with caution as it overrides the search
+ path that may have been hard compiled into a shared library. In
+ such a case it is possible to use unintentionally a different
+ search path than the runtime linker would do.
+
+ The linker uses the following search paths to locate required
+ shared libraries.
+ 1. Any directories specified by `-rpath-link' options.
+
+ 2. Any directories specified by `-rpath' options. The difference
+ between `-rpath' and `-rpath-link' is that directories
+ specified by `-rpath' options are included in the executable
+ and used at runtime, whereas the `-rpath-link' option is only
+ effective at link time. It is for the native linker only.
+
+ 3. On an ELF system, if the `-rpath' and `rpath-link' options
+ were not used, search the contents of the environment variable
+ `LD_RUN_PATH'. It is for the native linker only.
+
+ 4. On SunOS, if the `-rpath' option was not used, search any
+ directories specified using `-L' options.
+
+ 5. For a native linker, the contents of the environment variable
+ `LD_LIBRARY_PATH'.
+
+ 6. For a native ELF linker, the directories in `DT_RUNPATH' or
+ `DT_RPATH' of a shared library are searched for shared
+ libraries needed by it. The `DT_RPATH' entries are ignored if
+ `DT_RUNPATH' entries exist.
+
+ 7. The default directories, normally `/lib' and `/usr/lib'.
+
+ 8. For a native linker on an ELF system, if the file
+ `/etc/ld.so.conf' exists, the list of directories found in
+ that file.
+
+ If the required shared library is not found, the linker will issue
+ a warning and continue with the link.
+
+`-shared'
+`-Bshareable'
+ Create a shared library. This is currently only supported on ELF,
+ XCOFF and SunOS platforms. On SunOS, the linker will
+ automatically create a shared library if the `-e' option is not
+ used and there are undefined symbols in the link.
+
+`--sort-common'
+ This option tells `ld' to sort the common symbols by size when it
+ places them in the appropriate output sections. First come all
+ the one byte symbols, then all the two byte, then all the four
+ byte, and then everything else. This is to prevent gaps between
+ symbols due to alignment constraints.
+
+`--sort-section name'
+ This option will apply `SORT_BY_NAME' to all wildcard section
+ patterns in the linker script.
+
+`--sort-section alignment'
+ This option will apply `SORT_BY_ALIGNMENT' to all wildcard section
+ patterns in the linker script.
+
+`--split-by-file [SIZE]'
+ Similar to `--split-by-reloc' but creates a new output section for
+ each input file when SIZE is reached. SIZE defaults to a size of
+ 1 if not given.
+
+`--split-by-reloc [COUNT]'
+ Tries to creates extra sections in the output file so that no
+ single output section in the file contains more than COUNT
+ relocations. This is useful when generating huge relocatable
+ files for downloading into certain real time kernels with the COFF
+ object file format; since COFF cannot represent more than 65535
+ relocations in a single section. Note that this will fail to work
+ with object file formats which do not support arbitrary sections.
+ The linker will not split up individual input sections for
+ redistribution, so if a single input section contains more than
+ COUNT relocations one output section will contain that many
+ relocations. COUNT defaults to a value of 32768.
+
+`--stats'
+ Compute and display statistics about the operation of the linker,
+ such as execution time and memory usage.
+
+`--sysroot=DIRECTORY'
+ Use DIRECTORY as the location of the sysroot, overriding the
+ configure-time default. This option is only supported by linkers
+ that were configured using `--with-sysroot'.
+
+`--traditional-format'
+ For some targets, the output of `ld' is different in some ways from
+ the output of some existing linker. This switch requests `ld' to
+ use the traditional format instead.
+
+ For example, on SunOS, `ld' combines duplicate entries in the
+ symbol string table. This can reduce the size of an output file
+ with full debugging information by over 30 percent.
+ Unfortunately, the SunOS `dbx' program can not read the resulting
+ program (`gdb' has no trouble). The `--traditional-format' switch
+ tells `ld' to not combine duplicate entries.
+
+`--section-start SECTIONNAME=ORG'
+ Locate a section in the output file at the absolute address given
+ by ORG. You may use this option as many times as necessary to
+ locate multiple sections in the command line. ORG must be a
+ single hexadecimal integer; for compatibility with other linkers,
+ you may omit the leading `0x' usually associated with hexadecimal
+ values. _Note:_ there should be no white space between
+ SECTIONNAME, the equals sign ("<=>"), and ORG.
+
+`-Tbss ORG'
+`-Tdata ORG'
+`-Ttext ORG'
+ Same as -section-start, with `.bss', `.data' or `.text' as the
+ SECTIONNAME.
+
+`--unresolved-symbols=METHOD'
+ Determine how to handle unresolved symbols. There are four
+ possible values for `method':
+
+ `ignore-all'
+ Do not report any unresolved symbols.
+
+ `report-all'
+ Report all unresolved symbols. This is the default.
+
+ `ignore-in-object-files'
+ Report unresolved symbols that are contained in shared
+ libraries, but ignore them if they come from regular object
+ files.
+
+ `ignore-in-shared-libs'
+ Report unresolved symbols that come from regular object
+ files, but ignore them if they come from shared libraries.
+ This can be useful when creating a dynamic binary and it is
+ known that all the shared libraries that it should be
+ referencing are included on the linker's command line.
+
+ The behaviour for shared libraries on their own can also be
+ controlled by the `--[no-]allow-shlib-undefined' option.
+
+ Normally the linker will generate an error message for each
+ reported unresolved symbol but the option
+ `--warn-unresolved-symbols' can change this to a warning.
+
+`--dll-verbose'
+`--verbose'
+ Display the version number for `ld' and list the linker emulations
+ supported. Display which input files can and cannot be opened.
+ Display the linker script being used by the linker.
+
+`--version-script=VERSION-SCRIPTFILE'
+ Specify the name of a version script to the linker. This is
+ typically used when creating shared libraries to specify
+ additional information about the version hierarchy for the library
+ being created. This option is only meaningful on ELF platforms
+ which support shared libraries. *Note VERSION::.
+
+`--warn-common'
+ Warn when a common symbol is combined with another common symbol
+ or with a symbol definition. Unix linkers allow this somewhat
+ sloppy practise, but linkers on some other operating systems do
+ not. This option allows you to find potential problems from
+ combining global symbols. Unfortunately, some C libraries use
+ this practise, so you may get some warnings about symbols in the
+ libraries as well as in your programs.
+
+ There are three kinds of global symbols, illustrated here by C
+ examples:
+
+ `int i = 1;'
+ A definition, which goes in the initialized data section of
+ the output file.
+
+ `extern int i;'
+ An undefined reference, which does not allocate space. There
+ must be either a definition or a common symbol for the
+ variable somewhere.
+
+ `int i;'
+ A common symbol. If there are only (one or more) common
+ symbols for a variable, it goes in the uninitialized data
+ area of the output file. The linker merges multiple common
+ symbols for the same variable into a single symbol. If they
+ are of different sizes, it picks the largest size. The
+ linker turns a common symbol into a declaration, if there is
+ a definition of the same variable.
+
+ The `--warn-common' option can produce five kinds of warnings.
+ Each warning consists of a pair of lines: the first describes the
+ symbol just encountered, and the second describes the previous
+ symbol encountered with the same name. One or both of the two
+ symbols will be a common symbol.
+
+ 1. Turning a common symbol into a reference, because there is
+ already a definition for the symbol.
+ FILE(SECTION): warning: common of `SYMBOL'
+ overridden by definition
+ FILE(SECTION): warning: defined here
+
+ 2. Turning a common symbol into a reference, because a later
+ definition for the symbol is encountered. This is the same
+ as the previous case, except that the symbols are encountered
+ in a different order.
+ FILE(SECTION): warning: definition of `SYMBOL'
+ overriding common
+ FILE(SECTION): warning: common is here
+
+ 3. Merging a common symbol with a previous same-sized common
+ symbol.
+ FILE(SECTION): warning: multiple common
+ of `SYMBOL'
+ FILE(SECTION): warning: previous common is here
+
+ 4. Merging a common symbol with a previous larger common symbol.
+ FILE(SECTION): warning: common of `SYMBOL'
+ overridden by larger common
+ FILE(SECTION): warning: larger common is here
+
+ 5. Merging a common symbol with a previous smaller common
+ symbol. This is the same as the previous case, except that
+ the symbols are encountered in a different order.
+ FILE(SECTION): warning: common of `SYMBOL'
+ overriding smaller common
+ FILE(SECTION): warning: smaller common is here
+
+`--warn-constructors'
+ Warn if any global constructors are used. This is only useful for
+ a few object file formats. For formats like COFF or ELF, the
+ linker can not detect the use of global constructors.
+
+`--warn-multiple-gp'
+ Warn if multiple global pointer values are required in the output
+ file. This is only meaningful for certain processors, such as the
+ Alpha. Specifically, some processors put large-valued constants
+ in a special section. A special register (the global pointer)
+ points into the middle of this section, so that constants can be
+ loaded efficiently via a base-register relative addressing mode.
+ Since the offset in base-register relative mode is fixed and
+ relatively small (e.g., 16 bits), this limits the maximum size of
+ the constant pool. Thus, in large programs, it is often necessary
+ to use multiple global pointer values in order to be able to
+ address all possible constants. This option causes a warning to
+ be issued whenever this case occurs.
+
+`--warn-once'
+ Only warn once for each undefined symbol, rather than once per
+ module which refers to it.
+
+`--warn-section-align'
+ Warn if the address of an output section is changed because of
+ alignment. Typically, the alignment will be set by an input
+ section. The address will only be changed if it not explicitly
+ specified; that is, if the `SECTIONS' command does not specify a
+ start address for the section (*note SECTIONS::).
+
+`--warn-shared-textrel'
+ Warn if the linker adds a DT_TEXTREL to a shared object.
+
+`--warn-unresolved-symbols'
+ If the linker is going to report an unresolved symbol (see the
+ option `--unresolved-symbols') it will normally generate an error.
+ This option makes it generate a warning instead.
+
+`--error-unresolved-symbols'
+ This restores the linker's default behaviour of generating errors
+ when it is reporting unresolved symbols.
+
+`--whole-archive'
+ For each archive mentioned on the command line after the
+ `--whole-archive' option, include every object file in the archive
+ in the link, rather than searching the archive for the required
+ object files. This is normally used to turn an archive file into
+ a shared library, forcing every object to be included in the
+ resulting shared library. This option may be used more than once.
+
+ Two notes when using this option from gcc: First, gcc doesn't know
+ about this option, so you have to use `-Wl,-whole-archive'.
+ Second, don't forget to use `-Wl,-no-whole-archive' after your
+ list of archives, because gcc will add its own list of archives to
+ your link and you may not want this flag to affect those as well.
+
+`--wrap SYMBOL'
+ Use a wrapper function for SYMBOL. Any undefined reference to
+ SYMBOL will be resolved to `__wrap_SYMBOL'. Any undefined
+ reference to `__real_SYMBOL' will be resolved to SYMBOL.
+
+ This can be used to provide a wrapper for a system function. The
+ wrapper function should be called `__wrap_SYMBOL'. If it wishes
+ to call the system function, it should call `__real_SYMBOL'.
+
+ Here is a trivial example:
+
+ void *
+ __wrap_malloc (size_t c)
+ {
+ printf ("malloc called with %zu\n", c);
+ return __real_malloc (c);
+ }
+
+ If you link other code with this file using `--wrap malloc', then
+ all calls to `malloc' will call the function `__wrap_malloc'
+ instead. The call to `__real_malloc' in `__wrap_malloc' will call
+ the real `malloc' function.
+
+ You may wish to provide a `__real_malloc' function as well, so that
+ links without the `--wrap' option will succeed. If you do this,
+ you should not put the definition of `__real_malloc' in the same
+ file as `__wrap_malloc'; if you do, the assembler may resolve the
+ call before the linker has a chance to wrap it to `malloc'.
+
+`--eh-frame-hdr'
+ Request creation of `.eh_frame_hdr' section and ELF
+ `PT_GNU_EH_FRAME' segment header.
+
+`--enable-new-dtags'
+`--disable-new-dtags'
+ This linker can create the new dynamic tags in ELF. But the older
+ ELF systems may not understand them. If you specify
+ `--enable-new-dtags', the dynamic tags will be created as needed.
+ If you specify `--disable-new-dtags', no new dynamic tags will be
+ created. By default, the new dynamic tags are not created. Note
+ that those options are only available for ELF systems.
+
+`--hash-size=NUMBER'
+ Set the default size of the linker's hash tables to a prime number
+ close to NUMBER. Increasing this value can reduce the length of
+ time it takes the linker to perform its tasks, at the expense of
+ increasing the linker's memory requirements. Similarly reducing
+ this value can reduce the memory requirements at the expense of
+ speed.
+
+`--reduce-memory-overheads'
+ This option reduces memory requirements at ld runtime, at the
+ expense of linking speed. This was introduced to select the old
+ O(n^2) algorithm for link map file generation, rather than the new
+ O(n) algorithm which uses about 40% more memory for symbol storage.
+
+ Another effect of the switch is to set the default hash table size
+ to 1021, which again saves memory at the cost of lengthening the
+ linker's run time. This is not done however if the `--hash-size'
+ switch has been used.
+
+ The `--reduce-memory-overheads' switch may be also be used to
+ enable other tradeoffs in future versions of the linker.
+
+
+2.1.1 Options Specific to i386 PE Targets
+-----------------------------------------
+
+The i386 PE linker supports the `-shared' option, which causes the
+output to be a dynamically linked library (DLL) instead of a normal
+executable. You should name the output `*.dll' when you use this
+option. In addition, the linker fully supports the standard `*.def'
+files, which may be specified on the linker command line like an object
+file (in fact, it should precede archives it exports symbols from, to
+ensure that they get linked in, just like a normal object file).
+
+ In addition to the options common to all targets, the i386 PE linker
+support additional command line options that are specific to the i386
+PE target. Options that take values may be separated from their values
+by either a space or an equals sign.
+
+`--add-stdcall-alias'
+ If given, symbols with a stdcall suffix (@NN) will be exported
+ as-is and also with the suffix stripped. [This option is specific
+ to the i386 PE targeted port of the linker]
+
+`--base-file FILE'
+ Use FILE as the name of a file in which to save the base addresses
+ of all the relocations needed for generating DLLs with `dlltool'.
+ [This is an i386 PE specific option]
+
+`--dll'
+ Create a DLL instead of a regular executable. You may also use
+ `-shared' or specify a `LIBRARY' in a given `.def' file. [This
+ option is specific to the i386 PE targeted port of the linker]
+
+`--enable-stdcall-fixup'
+`--disable-stdcall-fixup'
+ If the link finds a symbol that it cannot resolve, it will attempt
+ to do "fuzzy linking" by looking for another defined symbol that
+ differs only in the format of the symbol name (cdecl vs stdcall)
+ and will resolve that symbol by linking to the match. For
+ example, the undefined symbol `_foo' might be linked to the
+ function `_foo@12', or the undefined symbol `_bar@16' might be
+ linked to the function `_bar'. When the linker does this, it
+ prints a warning, since it normally should have failed to link,
+ but sometimes import libraries generated from third-party dlls may
+ need this feature to be usable. If you specify
+ `--enable-stdcall-fixup', this feature is fully enabled and
+ warnings are not printed. If you specify
+ `--disable-stdcall-fixup', this feature is disabled and such
+ mismatches are considered to be errors. [This option is specific
+ to the i386 PE targeted port of the linker]
+
+`--export-all-symbols'
+ If given, all global symbols in the objects used to build a DLL
+ will be exported by the DLL. Note that this is the default if
+ there otherwise wouldn't be any exported symbols. When symbols are
+ explicitly exported via DEF files or implicitly exported via
+ function attributes, the default is to not export anything else
+ unless this option is given. Note that the symbols `DllMain@12',
+ `DllEntryPoint@0', `DllMainCRTStartup@12', and `impure_ptr' will
+ not be automatically exported. Also, symbols imported from other
+ DLLs will not be re-exported, nor will symbols specifying the
+ DLL's internal layout such as those beginning with `_head_' or
+ ending with `_iname'. In addition, no symbols from `libgcc',
+ `libstd++', `libmingw32', or `crtX.o' will be exported. Symbols
+ whose names begin with `__rtti_' or `__builtin_' will not be
+ exported, to help with C++ DLLs. Finally, there is an extensive
+ list of cygwin-private symbols that are not exported (obviously,
+ this applies on when building DLLs for cygwin targets). These
+ cygwin-excludes are: `_cygwin_dll_entry@12',
+ `_cygwin_crt0_common@8', `_cygwin_noncygwin_dll_entry@12',
+ `_fmode', `_impure_ptr', `cygwin_attach_dll', `cygwin_premain0',
+ `cygwin_premain1', `cygwin_premain2', `cygwin_premain3', and
+ `environ'. [This option is specific to the i386 PE targeted port
+ of the linker]
+
+`--exclude-symbols SYMBOL,SYMBOL,...'
+ Specifies a list of symbols which should not be automatically
+ exported. The symbol names may be delimited by commas or colons.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--file-alignment'
+ Specify the file alignment. Sections in the file will always
+ begin at file offsets which are multiples of this number. This
+ defaults to 512. [This option is specific to the i386 PE targeted
+ port of the linker]
+
+`--heap RESERVE'
+`--heap RESERVE,COMMIT'
+ Specify the amount of memory to reserve (and optionally commit) to
+ be used as heap for this program. The default is 1Mb reserved, 4K
+ committed. [This option is specific to the i386 PE targeted port
+ of the linker]
+
+`--image-base VALUE'
+ Use VALUE as the base address of your program or dll. This is the
+ lowest memory location that will be used when your program or dll
+ is loaded. To reduce the need to relocate and improve performance
+ of your dlls, each should have a unique base address and not
+ overlap any other dlls. The default is 0x400000 for executables,
+ and 0x10000000 for dlls. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--kill-at'
+ If given, the stdcall suffixes (@NN) will be stripped from symbols
+ before they are exported. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--large-address-aware'
+ If given, the appropriate bit in the "Charateristics" field of the
+ COFF header is set to indicate that this executable supports
+ virtual addresses greater than 2 gigabytes. This should be used
+ in conjuction with the /3GB or /USERVA=VALUE megabytes switch in
+ the "[operating systems]" section of the BOOT.INI. Otherwise,
+ this bit has no effect. [This option is specific to PE targeted
+ ports of the linker]
+
+`--major-image-version VALUE'
+ Sets the major number of the "image version". Defaults to 1.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--major-os-version VALUE'
+ Sets the major number of the "os version". Defaults to 4. [This
+ option is specific to the i386 PE targeted port of the linker]
+
+`--major-subsystem-version VALUE'
+ Sets the major number of the "subsystem version". Defaults to 4.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--minor-image-version VALUE'
+ Sets the minor number of the "image version". Defaults to 0.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--minor-os-version VALUE'
+ Sets the minor number of the "os version". Defaults to 0. [This
+ option is specific to the i386 PE targeted port of the linker]
+
+`--minor-subsystem-version VALUE'
+ Sets the minor number of the "subsystem version". Defaults to 0.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--output-def FILE'
+ The linker will create the file FILE which will contain a DEF file
+ corresponding to the DLL the linker is generating. This DEF file
+ (which should be called `*.def') may be used to create an import
+ library with `dlltool' or may be used as a reference to
+ automatically or implicitly exported symbols. [This option is
+ specific to the i386 PE targeted port of the linker]
+
+`--out-implib FILE'
+ The linker will create the file FILE which will contain an import
+ lib corresponding to the DLL the linker is generating. This import
+ lib (which should be called `*.dll.a' or `*.a' may be used to link
+ clients against the generated DLL; this behaviour makes it
+ possible to skip a separate `dlltool' import library creation step.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--enable-auto-image-base'
+ Automatically choose the image base for DLLs, unless one is
+ specified using the `--image-base' argument. By using a hash
+ generated from the dllname to create unique image bases for each
+ DLL, in-memory collisions and relocations which can delay program
+ execution are avoided. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--disable-auto-image-base'
+ Do not automatically generate a unique image base. If there is no
+ user-specified image base (`--image-base') then use the platform
+ default. [This option is specific to the i386 PE targeted port of
+ the linker]
+
+`--dll-search-prefix STRING'
+ When linking dynamically to a dll without an import library,
+ search for `<string><basename>.dll' in preference to
+ `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
+ `--dll-search-prefix=cyg'. [This option is specific to the i386
+ PE targeted port of the linker]
+
+`--enable-auto-import'
+ Do sophisticated linking of `_symbol' to `__imp__symbol' for DATA
+ imports from DLLs, and create the necessary thunking symbols when
+ building the import libraries with those DATA exports. Note: Use
+ of the 'auto-import' extension will cause the text section of the
+ image file to be made writable. This does not conform to the
+ PE-COFF format specification published by Microsoft.
+
+ Using 'auto-import' generally will 'just work' - but sometimes you
+ may see this message:
+
+ "variable '<var>' can't be auto-imported. Please read the
+ documentation for ld's `--enable-auto-import' for details."
+
+ This message occurs when some (sub)expression accesses an address
+ ultimately given by the sum of two constants (Win32 import tables
+ only allow one). Instances where this may occur include accesses
+ to member fields of struct variables imported from a DLL, as well
+ as using a constant index into an array variable imported from a
+ DLL. Any multiword variable (arrays, structs, long long, etc) may
+ trigger this error condition. However, regardless of the exact
+ data type of the offending exported variable, ld will always
+ detect it, issue the warning, and exit.
+
+ There are several ways to address this difficulty, regardless of
+ the data type of the exported variable:
+
+ One way is to use -enable-runtime-pseudo-reloc switch. This leaves
+ the task of adjusting references in your client code for runtime
+ environment, so this method works only when runtime environment
+ supports this feature.
+
+ A second solution is to force one of the 'constants' to be a
+ variable - that is, unknown and un-optimizable at compile time.
+ For arrays, there are two possibilities: a) make the indexee (the
+ array's address) a variable, or b) make the 'constant' index a
+ variable. Thus:
+
+ extern type extern_array[];
+ extern_array[1] -->
+ { volatile type *t=extern_array; t[1] }
+
+ or
+
+ extern type extern_array[];
+ extern_array[1] -->
+ { volatile int t=1; extern_array[t] }
+
+ For structs (and most other multiword data types) the only option
+ is to make the struct itself (or the long long, or the ...)
+ variable:
+
+ extern struct s extern_struct;
+ extern_struct.field -->
+ { volatile struct s *t=&extern_struct; t->field }
+
+ or
+
+ extern long long extern_ll;
+ extern_ll -->
+ { volatile long long * local_ll=&extern_ll; *local_ll }
+
+ A third method of dealing with this difficulty is to abandon
+ 'auto-import' for the offending symbol and mark it with
+ `__declspec(dllimport)'. However, in practise that requires using
+ compile-time #defines to indicate whether you are building a DLL,
+ building client code that will link to the DLL, or merely
+ building/linking to a static library. In making the choice
+ between the various methods of resolving the 'direct address with
+ constant offset' problem, you should consider typical real-world
+ usage:
+
+ Original:
+ --foo.h
+ extern int arr[];
+ --foo.c
+ #include "foo.h"
+ void main(int argc, char **argv){
+ printf("%d\n",arr[1]);
+ }
+
+ Solution 1:
+ --foo.h
+ extern int arr[];
+ --foo.c
+ #include "foo.h"
+ void main(int argc, char **argv){
+ /* This workaround is for win32 and cygwin; do not "optimize" */
+ volatile int *parr = arr;
+ printf("%d\n",parr[1]);
+ }
+
+ Solution 2:
+ --foo.h
+ /* Note: auto-export is assumed (no __declspec(dllexport)) */
+ #if (defined(_WIN32) || defined(__CYGWIN__)) && \
+ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
+ #define FOO_IMPORT __declspec(dllimport)
+ #else
+ #define FOO_IMPORT
+ #endif
+ extern FOO_IMPORT int arr[];
+ --foo.c
+ #include "foo.h"
+ void main(int argc, char **argv){
+ printf("%d\n",arr[1]);
+ }
+
+ A fourth way to avoid this problem is to re-code your library to
+ use a functional interface rather than a data interface for the
+ offending variables (e.g. set_foo() and get_foo() accessor
+ functions). [This option is specific to the i386 PE targeted port
+ of the linker]
+
+`--disable-auto-import'
+ Do not attempt to do sophisticated linking of `_symbol' to
+ `__imp__symbol' for DATA imports from DLLs. [This option is
+ specific to the i386 PE targeted port of the linker]
+
+`--enable-runtime-pseudo-reloc'
+ If your code contains expressions described in -enable-auto-import
+ section, that is, DATA imports from DLL with non-zero offset, this
+ switch will create a vector of 'runtime pseudo relocations' which
+ can be used by runtime environment to adjust references to such
+ data in your client code. [This option is specific to the i386 PE
+ targeted port of the linker]
+
+`--disable-runtime-pseudo-reloc'
+ Do not create pseudo relocations for non-zero offset DATA imports
+ from DLLs. This is the default. [This option is specific to the
+ i386 PE targeted port of the linker]
+
+`--enable-extra-pe-debug'
+ Show additional debug info related to auto-import symbol thunking.
+ [This option is specific to the i386 PE targeted port of the
+ linker]
+
+`--section-alignment'
+ Sets the section alignment. Sections in memory will always begin
+ at addresses which are a multiple of this number. Defaults to
+ 0x1000. [This option is specific to the i386 PE targeted port of
+ the linker]
+
+`--stack RESERVE'
+`--stack RESERVE,COMMIT'
+ Specify the amount of memory to reserve (and optionally commit) to
+ be used as stack for this program. The default is 2Mb reserved, 4K
+ committed. [This option is specific to the i386 PE targeted port
+ of the linker]
+
+`--subsystem WHICH'
+`--subsystem WHICH:MAJOR'
+`--subsystem WHICH:MAJOR.MINOR'
+ Specifies the subsystem under which your program will execute. The
+ legal values for WHICH are `native', `windows', `console',
+ `posix', and `xbox'. You may optionally set the subsystem version
+ also. Numeric values are also accepted for WHICH. [This option
+ is specific to the i386 PE targeted port of the linker]
+
+
+
+File: ld.info, Node: Environment, Prev: Options, Up: Invocation
+
+2.2 Environment Variables
+=========================
+
+You can change the behaviour of `ld' with the environment variables
+`GNUTARGET', `LDEMULATION' and `COLLECT_NO_DEMANGLE'.
+
+ `GNUTARGET' determines the input-file object format if you don't use
+`-b' (or its synonym `--format'). Its value should be one of the BFD
+names for an input format (*note BFD::). If there is no `GNUTARGET' in
+the environment, `ld' uses the natural format of the target. If
+`GNUTARGET' is set to `default' then BFD attempts to discover the input
+format by examining binary input files; this method often succeeds, but
+there are potential ambiguities, since there is no method of ensuring
+that the magic number used to specify object-file formats is unique.
+However, the configuration procedure for BFD on each system places the
+conventional format for that system first in the search-list, so
+ambiguities are resolved in favor of convention.
+
+ `LDEMULATION' determines the default emulation if you don't use the
+`-m' option. The emulation can affect various aspects of linker
+behaviour, particularly the default linker script. You can list the
+available emulations with the `--verbose' or `-V' options. If the `-m'
+option is not used, and the `LDEMULATION' environment variable is not
+defined, the default emulation depends upon how the linker was
+configured.
+
+ Normally, the linker will default to demangling symbols. However, if
+`COLLECT_NO_DEMANGLE' is set in the environment, then it will default
+to not demangling symbols. This environment variable is used in a
+similar fashion by the `gcc' linker wrapper program. The default may
+be overridden by the `--demangle' and `--no-demangle' options.
+
+
+File: ld.info, Node: Scripts, Next: Machine Dependent, Prev: Invocation, Up: Top
+
+3 Linker Scripts
+****************
+
+Every link is controlled by a "linker script". This script is written
+in the linker command language.
+
+ The main purpose of the linker script is to describe how the
+sections in the input files should be mapped into the output file, and
+to control the memory layout of the output file. Most linker scripts
+do nothing more than this. However, when necessary, the linker script
+can also direct the linker to perform many other operations, using the
+commands described below.
+
+ The linker always uses a linker script. If you do not supply one
+yourself, the linker will use a default script that is compiled into the
+linker executable. You can use the `--verbose' command line option to
+display the default linker script. Certain command line options, such
+as `-r' or `-N', will affect the default linker script.
+
+ You may supply your own linker script by using the `-T' command line
+option. When you do this, your linker script will replace the default
+linker script.
+
+ You may also use linker scripts implicitly by naming them as input
+files to the linker, as though they were files to be linked. *Note
+Implicit Linker Scripts::.
+
+* Menu:
+
+* Basic Script Concepts:: Basic Linker Script Concepts
+* Script Format:: Linker Script Format
+* Simple Example:: Simple Linker Script Example
+* Simple Commands:: Simple Linker Script Commands
+* Assignments:: Assigning Values to Symbols
+* SECTIONS:: SECTIONS Command
+* MEMORY:: MEMORY Command
+* PHDRS:: PHDRS Command
+* VERSION:: VERSION Command
+* Expressions:: Expressions in Linker Scripts
+* Implicit Linker Scripts:: Implicit Linker Scripts
+
+
+File: ld.info, Node: Basic Script Concepts, Next: Script Format, Up: Scripts
+
+3.1 Basic Linker Script Concepts
+================================
+
+We need to define some basic concepts and vocabulary in order to
+describe the linker script language.
+
+ The linker combines input files into a single output file. The
+output file and each input file are in a special data format known as an
+"object file format". Each file is called an "object file". The
+output file is often called an "executable", but for our purposes we
+will also call it an object file. Each object file has, among other
+things, a list of "sections". We sometimes refer to a section in an
+input file as an "input section"; similarly, a section in the output
+file is an "output section".
+
+ Each section in an object file has a name and a size. Most sections
+also have an associated block of data, known as the "section contents".
+A section may be marked as "loadable", which mean that the contents
+should be loaded into memory when the output file is run. A section
+with no contents may be "allocatable", which means that an area in
+memory should be set aside, but nothing in particular should be loaded
+there (in some cases this memory must be zeroed out). A section which
+is neither loadable nor allocatable typically contains some sort of
+debugging information.
+
+ Every loadable or allocatable output section has two addresses. The
+first is the "VMA", or virtual memory address. This is the address the
+section will have when the output file is run. The second is the
+"LMA", or load memory address. This is the address at which the
+section will be loaded. In most cases the two addresses will be the
+same. An example of when they might be different is when a data section
+is loaded into ROM, and then copied into RAM when the program starts up
+(this technique is often used to initialize global variables in a ROM
+based system). In this case the ROM address would be the LMA, and the
+RAM address would be the VMA.
+
+ You can see the sections in an object file by using the `objdump'
+program with the `-h' option.
+
+ Every object file also has a list of "symbols", known as the "symbol
+table". A symbol may be defined or undefined. Each symbol has a name,
+and each defined symbol has an address, among other information. If
+you compile a C or C++ program into an object file, you will get a
+defined symbol for every defined function and global or static
+variable. Every undefined function or global variable which is
+referenced in the input file will become an undefined symbol.
+
+ You can see the symbols in an object file by using the `nm' program,
+or by using the `objdump' program with the `-t' option.
+
+
+File: ld.info, Node: Script Format, Next: Simple Example, Prev: Basic Script Concepts, Up: Scripts
+
+3.2 Linker Script Format
+========================
+
+Linker scripts are text files.
+
+ You write a linker script as a series of commands. Each command is
+either a keyword, possibly followed by arguments, or an assignment to a
+symbol. You may separate commands using semicolons. Whitespace is
+generally ignored.
+
+ Strings such as file or format names can normally be entered
+directly. If the file name contains a character such as a comma which
+would otherwise serve to separate file names, you may put the file name
+in double quotes. There is no way to use a double quote character in a
+file name.
+
+ You may include comments in linker scripts just as in C, delimited by
+`/*' and `*/'. As in C, comments are syntactically equivalent to
+whitespace.
+
+
+File: ld.info, Node: Simple Example, Next: Simple Commands, Prev: Script Format, Up: Scripts
+
+3.3 Simple Linker Script Example
+================================
+
+Many linker scripts are fairly simple.
+
+ The simplest possible linker script has just one command:
+`SECTIONS'. You use the `SECTIONS' command to describe the memory
+layout of the output file.
+
+ The `SECTIONS' command is a powerful command. Here we will describe
+a simple use of it. Let's assume your program consists only of code,
+initialized data, and uninitialized data. These will be in the
+`.text', `.data', and `.bss' sections, respectively. Let's assume
+further that these are the only sections which appear in your input
+files.
+
+ For this example, let's say that the code should be loaded at address
+0x10000, and that the data should start at address 0x8000000. Here is a
+linker script which will do that:
+ SECTIONS
+ {
+ . = 0x10000;
+ .text : { *(.text) }
+ . = 0x8000000;
+ .data : { *(.data) }
+ .bss : { *(.bss) }
+ }
+
+ You write the `SECTIONS' command as the keyword `SECTIONS', followed
+by a series of symbol assignments and output section descriptions
+enclosed in curly braces.
+
+ The first line inside the `SECTIONS' command of the above example
+sets the value of the special symbol `.', which is the location
+counter. If you do not specify the address of an output section in some
+other way (other ways are described later), the address is set from the
+current value of the location counter. The location counter is then
+incremented by the size of the output section. At the start of the
+`SECTIONS' command, the location counter has the value `0'.
+
+ The second line defines an output section, `.text'. The colon is
+required syntax which may be ignored for now. Within the curly braces
+after the output section name, you list the names of the input sections
+which should be placed into this output section. The `*' is a wildcard
+which matches any file name. The expression `*(.text)' means all
+`.text' input sections in all input files.
+
+ Since the location counter is `0x10000' when the output section
+`.text' is defined, the linker will set the address of the `.text'
+section in the output file to be `0x10000'.
+
+ The remaining lines define the `.data' and `.bss' sections in the
+output file. The linker will place the `.data' output section at
+address `0x8000000'. After the linker places the `.data' output
+section, the value of the location counter will be `0x8000000' plus the
+size of the `.data' output section. The effect is that the linker will
+place the `.bss' output section immediately after the `.data' output
+section in memory.
+
+ The linker will ensure that each output section has the required
+alignment, by increasing the location counter if necessary. In this
+example, the specified addresses for the `.text' and `.data' sections
+will probably satisfy any alignment constraints, but the linker may
+have to create a small gap between the `.data' and `.bss' sections.
+
+ That's it! That's a simple and complete linker script.
+
+
+File: ld.info, Node: Simple Commands, Next: Assignments, Prev: Simple Example, Up: Scripts
+
+3.4 Simple Linker Script Commands
+=================================
+
+In this section we describe the simple linker script commands.
+
+* Menu:
+
+* Entry Point:: Setting the entry point
+* File Commands:: Commands dealing with files
+
+* Format Commands:: Commands dealing with object file formats
+
+* Miscellaneous Commands:: Other linker script commands
+
+
+File: ld.info, Node: Entry Point, Next: File Commands, Up: Simple Commands
+
+3.4.1 Setting the Entry Point
+-----------------------------
+
+The first instruction to execute in a program is called the "entry
+point". You can use the `ENTRY' linker script command to set the entry
+point. The argument is a symbol name:
+ ENTRY(SYMBOL)
+
+ There are several ways to set the entry point. The linker will set
+the entry point by trying each of the following methods in order, and
+stopping when one of them succeeds:
+ * the `-e' ENTRY command-line option;
+
+ * the `ENTRY(SYMBOL)' command in a linker script;
+
+ * the value of the symbol `start', if defined;
+
+ * the address of the first byte of the `.text' section, if present;
+
+ * The address `0'.
+
+
+File: ld.info, Node: File Commands, Next: Format Commands, Prev: Entry Point, Up: Simple Commands
+
+3.4.2 Commands Dealing with Files
+---------------------------------
+
+Several linker script commands deal with files.
+
+`INCLUDE FILENAME'
+ Include the linker script FILENAME at this point. The file will
+ be searched for in the current directory, and in any directory
+ specified with the `-L' option. You can nest calls to `INCLUDE'
+ up to 10 levels deep.
+
+`INPUT(FILE, FILE, ...)'
+`INPUT(FILE FILE ...)'
+ The `INPUT' command directs the linker to include the named files
+ in the link, as though they were named on the command line.
+
+ For example, if you always want to include `subr.o' any time you do
+ a link, but you can't be bothered to put it on every link command
+ line, then you can put `INPUT (subr.o)' in your linker script.
+
+ In fact, if you like, you can list all of your input files in the
+ linker script, and then invoke the linker with nothing but a `-T'
+ option.
+
+ In case a "sysroot prefix" is configured, and the filename starts
+ with the `/' character, and the script being processed was located
+ inside the "sysroot prefix", the filename will be looked for in
+ the "sysroot prefix". Otherwise, the linker will try to open the
+ file in the current directory. If it is not found, the linker
+ will search through the archive library search path. See the
+ description of `-L' in *Note Command Line Options: Options.
+
+ If you use `INPUT (-lFILE)', `ld' will transform the name to
+ `libFILE.a', as with the command line argument `-l'.
+
+ When you use the `INPUT' command in an implicit linker script, the
+ files will be included in the link at the point at which the linker
+ script file is included. This can affect archive searching.
+
+`GROUP(FILE, FILE, ...)'
+`GROUP(FILE FILE ...)'
+ The `GROUP' command is like `INPUT', except that the named files
+ should all be archives, and they are searched repeatedly until no
+ new undefined references are created. See the description of `-('
+ in *Note Command Line Options: Options.
+
+`AS_NEEDED(FILE, FILE, ...)'
+`AS_NEEDED(FILE FILE ...)'
+ This construct can appear only inside of the `INPUT' or `GROUP'
+ commands, among other filenames. The files listed will be handled
+ as if they appear directly in the `INPUT' or `GROUP' commands,
+ with the exception of ELF shared libraries, that will be added only
+ when they are actually needed. This construct essentially enables
+ `--as-needed' option for all the files listed inside of it and
+ restores previous `--as-needed' resp. `--no-as-needed' setting
+ afterwards.
+
+`OUTPUT(FILENAME)'
+ The `OUTPUT' command names the output file. Using
+ `OUTPUT(FILENAME)' in the linker script is exactly like using `-o
+ FILENAME' on the command line (*note Command Line Options:
+ Options.). If both are used, the command line option takes
+ precedence.
+
+ You can use the `OUTPUT' command to define a default name for the
+ output file other than the usual default of `a.out'.
+
+`SEARCH_DIR(PATH)'
+ The `SEARCH_DIR' command adds PATH to the list of paths where `ld'
+ looks for archive libraries. Using `SEARCH_DIR(PATH)' is exactly
+ like using `-L PATH' on the command line (*note Command Line
+ Options: Options.). If both are used, then the linker will search
+ both paths. Paths specified using the command line option are
+ searched first.
+
+`STARTUP(FILENAME)'
+ The `STARTUP' command is just like the `INPUT' command, except
+ that FILENAME will become the first input file to be linked, as
+ though it were specified first on the command line. This may be
+ useful when using a system in which the entry point is always the
+ start of the first file.
+
+
+File: ld.info, Node: Format Commands, Next: Miscellaneous Commands, Prev: File Commands, Up: Simple Commands
+
+3.4.3 Commands Dealing with Object File Formats
+-----------------------------------------------
+
+A couple of linker script commands deal with object file formats.
+
+`OUTPUT_FORMAT(BFDNAME)'
+`OUTPUT_FORMAT(DEFAULT, BIG, LITTLE)'
+ The `OUTPUT_FORMAT' command names the BFD format to use for the
+ output file (*note BFD::). Using `OUTPUT_FORMAT(BFDNAME)' is
+ exactly like using `--oformat BFDNAME' on the command line (*note
+ Command Line Options: Options.). If both are used, the command
+ line option takes precedence.
+
+ You can use `OUTPUT_FORMAT' with three arguments to use different
+ formats based on the `-EB' and `-EL' command line options. This
+ permits the linker script to set the output format based on the
+ desired endianness.
+
+ If neither `-EB' nor `-EL' are used, then the output format will
+ be the first argument, DEFAULT. If `-EB' is used, the output
+ format will be the second argument, BIG. If `-EL' is used, the
+ output format will be the third argument, LITTLE.
+
+ For example, the default linker script for the MIPS ELF target
+ uses this command:
+ OUTPUT_FORMAT(elf32-bigmips, elf32-bigmips, elf32-littlemips)
+ This says that the default format for the output file is
+ `elf32-bigmips', but if the user uses the `-EL' command line
+ option, the output file will be created in the `elf32-littlemips'
+ format.
+
+`TARGET(BFDNAME)'
+ The `TARGET' command names the BFD format to use when reading input
+ files. It affects subsequent `INPUT' and `GROUP' commands. This
+ command is like using `-b BFDNAME' on the command line (*note
+ Command Line Options: Options.). If the `TARGET' command is used
+ but `OUTPUT_FORMAT' is not, then the last `TARGET' command is also
+ used to set the format for the output file. *Note BFD::.
+
+
+File: ld.info, Node: Miscellaneous Commands, Prev: Format Commands, Up: Simple Commands
+
+3.4.4 Other Linker Script Commands
+----------------------------------
+
+There are a few other linker scripts commands.
+
+`ASSERT(EXP, MESSAGE)'
+ Ensure that EXP is non-zero. If it is zero, then exit the linker
+ with an error code, and print MESSAGE.
+
+`EXTERN(SYMBOL SYMBOL ...)'
+ Force SYMBOL to be entered in the output file as an undefined
+ symbol. Doing this may, for example, trigger linking of additional
+ modules from standard libraries. You may list several SYMBOLs for
+ each `EXTERN', and you may use `EXTERN' multiple times. This
+ command has the same effect as the `-u' command-line option.
+
+`FORCE_COMMON_ALLOCATION'
+ This command has the same effect as the `-d' command-line option:
+ to make `ld' assign space to common symbols even if a relocatable
+ output file is specified (`-r').
+
+`INHIBIT_COMMON_ALLOCATION'
+ This command has the same effect as the `--no-define-common'
+ command-line option: to make `ld' omit the assignment of addresses
+ to common symbols even for a non-relocatable output file.
+
+`NOCROSSREFS(SECTION SECTION ...)'
+ This command may be used to tell `ld' to issue an error about any
+ references among certain output sections.
+
+ In certain types of programs, particularly on embedded systems when
+ using overlays, when one section is loaded into memory, another
+ section will not be. Any direct references between the two
+ sections would be errors. For example, it would be an error if
+ code in one section called a function defined in the other section.
+
+ The `NOCROSSREFS' command takes a list of output section names. If
+ `ld' detects any cross references between the sections, it reports
+ an error and returns a non-zero exit status. Note that the
+ `NOCROSSREFS' command uses output section names, not input section
+ names.
+
+`OUTPUT_ARCH(BFDARCH)'
+ Specify a particular output machine architecture. The argument is
+ one of the names used by the BFD library (*note BFD::). You can
+ see the architecture of an object file by using the `objdump'
+ program with the `-f' option.
+
+
+File: ld.info, Node: Assignments, Next: SECTIONS, Prev: Simple Commands, Up: Scripts
+
+3.5 Assigning Values to Symbols
+===============================
+
+You may assign a value to a symbol in a linker script. This will define
+the symbol and place it into the symbol table with a global scope.
+
+* Menu:
+
+* Simple Assignments:: Simple Assignments
+* PROVIDE:: PROVIDE
+* PROVIDE_HIDDEN:: PROVIDE_HIDDEN
+* Source Code Reference:: How to use a linker script defined symbol in source code
+
+
+File: ld.info, Node: Simple Assignments, Next: PROVIDE, Up: Assignments
+
+3.5.1 Simple Assignments
+------------------------
+
+You may assign to a symbol using any of the C assignment operators:
+
+`SYMBOL = EXPRESSION ;'
+`SYMBOL += EXPRESSION ;'
+`SYMBOL -= EXPRESSION ;'
+`SYMBOL *= EXPRESSION ;'
+`SYMBOL /= EXPRESSION ;'
+`SYMBOL <<= EXPRESSION ;'
+`SYMBOL >>= EXPRESSION ;'
+`SYMBOL &= EXPRESSION ;'
+`SYMBOL |= EXPRESSION ;'
+
+ The first case will define SYMBOL to the value of EXPRESSION. In
+the other cases, SYMBOL must already be defined, and the value will be
+adjusted accordingly.
+
+ The special symbol name `.' indicates the location counter. You may
+only use this within a `SECTIONS' command. *Note Location Counter::.
+
+ The semicolon after EXPRESSION is required.
+
+ Expressions are defined below; see *Note Expressions::.
+
+ You may write symbol assignments as commands in their own right, or
+as statements within a `SECTIONS' command, or as part of an output
+section description in a `SECTIONS' command.
+
+ The section of the symbol will be set from the section of the
+expression; for more information, see *Note Expression Section::.
+
+ Here is an example showing the three different places that symbol
+assignments may be used:
+
+ floating_point = 0;
+ SECTIONS
+ {
+ .text :
+ {
+ *(.text)
+ _etext = .;
+ }
+ _bdata = (. + 3) & ~ 3;
+ .data : { *(.data) }
+ }
+ In this example, the symbol `floating_point' will be defined as
+zero. The symbol `_etext' will be defined as the address following the
+last `.text' input section. The symbol `_bdata' will be defined as the
+address following the `.text' output section aligned upward to a 4 byte
+boundary.
+
+
+File: ld.info, Node: PROVIDE, Next: PROVIDE_HIDDEN, Prev: Simple Assignments, Up: Assignments
+
+3.5.2 PROVIDE
+-------------
+
+In some cases, it is desirable for a linker script to define a symbol
+only if it is referenced and is not defined by any object included in
+the link. For example, traditional linkers defined the symbol `etext'.
+However, ANSI C requires that the user be able to use `etext' as a
+function name without encountering an error. The `PROVIDE' keyword may
+be used to define a symbol, such as `etext', only if it is referenced
+but not defined. The syntax is `PROVIDE(SYMBOL = EXPRESSION)'.
+
+ Here is an example of using `PROVIDE' to define `etext':
+ SECTIONS
+ {
+ .text :
+ {
+ *(.text)
+ _etext = .;
+ PROVIDE(etext = .);
+ }
+ }
+
+ In this example, if the program defines `_etext' (with a leading
+underscore), the linker will give a multiple definition error. If, on
+the other hand, the program defines `etext' (with no leading
+underscore), the linker will silently use the definition in the program.
+If the program references `etext' but does not define it, the linker
+will use the definition in the linker script.
+
+
+File: ld.info, Node: PROVIDE_HIDDEN, Next: Source Code Reference, Prev: PROVIDE, Up: Assignments
+
+3.5.3 PROVIDE_HIDDEN
+--------------------
+
+Similar to `PROVIDE'. For ELF targeted ports, the symbol will be
+hidden and won't be exported.
+
+
+File: ld.info, Node: Source Code Reference, Prev: PROVIDE_HIDDEN, Up: Assignments
+
+3.5.4 Source Code Reference
+---------------------------
+
+Accessing a linker script defined variable from source code is not
+intuitive. In particular a linker script symbol is not equivalent to a
+variable declaration in a high level language, it is instead a symbol
+that does not have a value.
+
+ Before going further, it is important to note that compilers often
+transform names in the source code into different names when they are
+stored in the symbol table. For example, Fortran compilers commonly
+prepend or append an underscore, and C++ performs extensive `name
+mangling'. Therefore there might be a discrepancy between the name of
+a variable as it is used in source code and the name of the same
+variable as it is defined in a linker script. For example in C a
+linker script variable might be referred to as:
+
+ extern int foo;
+
+ But in the linker script it might be defined as:
+
+ _foo = 1000;
+
+ In the remaining examples however it is assumed that no name
+transformation has taken place.
+
+ When a symbol is declared in a high level language such as C, two
+things happen. The first is that the compiler reserves enough space in
+the program's memory to hold the _value_ of the symbol. The second is
+that the compiler creates an entry in the program's symbol table which
+holds the symbol's _address_. ie the symbol table contains the address
+of the block of memory holding the symbol's value. So for example the
+following C declaration, at file scope:
+
+ int foo = 1000;
+
+ creates a entry called `foo' in the symbol table. This entry holds
+the address of an `int' sized block of memory where the number 1000 is
+initially stored.
+
+ When a program references a symbol the compiler generates code that
+first accesses the symbol table to find the address of the symbol's
+memory block and then code to read the value from that memory block.
+So:
+
+ foo = 1;
+
+ looks up the symbol `foo' in the symbol table, gets the address
+associated with this symbol and then writes the value 1 into that
+address. Whereas:
+
+ int * a = & foo;
+
+ looks up the symbol `foo' in the symbol table, gets it address and
+then copies this address into the block of memory associated with the
+variable `a'.
+
+ Linker scripts symbol declarations, by contrast, create an entry in
+the symbol table but do not assign any memory to them. Thus they are
+an address without a value. So for example the linker script
+definition:
+
+ foo = 1000;
+
+ creates an entry in the symbol table called `foo' which holds the
+address of memory location 1000, but nothing special is stored at
+address 1000. This means that you cannot access the _value_ of a
+linker script defined symbol - it has no value - all you can do is
+access the _address_ of a linker script defined symbol.
+
+ Hence when you are using a linker script defined symbol in source
+code you should always take the address of the symbol, and never
+attempt to use its value. For example suppose you want to copy the
+contents of a section of memory called .ROM into a section called
+.FLASH and the linker script contains these declarations:
+
+ start_of_ROM = .ROM;
+ end_of_ROM = .ROM + sizeof (.ROM) - 1;
+ start_of_FLASH = .FLASH;
+
+ Then the C source code to perform the copy would be:
+
+ extern char start_of_ROM, end_of_ROM, start_of_FLASH;
+
+ memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM);
+
+ Note the use of the `&' operators. These are correct.
+
+
+File: ld.info, Node: SECTIONS, Next: MEMORY, Prev: Assignments, Up: Scripts
+
+3.6 SECTIONS Command
+====================
+
+The `SECTIONS' command tells the linker how to map input sections into
+output sections, and how to place the output sections in memory.
+
+ The format of the `SECTIONS' command is:
+ SECTIONS
+ {
+ SECTIONS-COMMAND
+ SECTIONS-COMMAND
+ ...
+ }
+
+ Each SECTIONS-COMMAND may of be one of the following:
+
+ * an `ENTRY' command (*note Entry command: Entry Point.)
+
+ * a symbol assignment (*note Assignments::)
+
+ * an output section description
+
+ * an overlay description
+
+ The `ENTRY' command and symbol assignments are permitted inside the
+`SECTIONS' command for convenience in using the location counter in
+those commands. This can also make the linker script easier to
+understand because you can use those commands at meaningful points in
+the layout of the output file.
+
+ Output section descriptions and overlay descriptions are described
+below.
+
+ If you do not use a `SECTIONS' command in your linker script, the
+linker will place each input section into an identically named output
+section in the order that the sections are first encountered in the
+input files. If all input sections are present in the first file, for
+example, the order of sections in the output file will match the order
+in the first input file. The first section will be at address zero.
+
+* Menu:
+
+* Output Section Description:: Output section description
+* Output Section Name:: Output section name
+* Output Section Address:: Output section address
+* Input Section:: Input section description
+* Output Section Data:: Output section data
+* Output Section Keywords:: Output section keywords
+* Output Section Discarding:: Output section discarding
+* Output Section Attributes:: Output section attributes
+* Overlay Description:: Overlay description
+
+
+File: ld.info, Node: Output Section Description, Next: Output Section Name, Up: SECTIONS
+
+3.6.1 Output Section Description
+--------------------------------
+
+The full description of an output section looks like this:
+ SECTION [ADDRESS] [(TYPE)] :
+ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)]
+ {
+ OUTPUT-SECTION-COMMAND
+ OUTPUT-SECTION-COMMAND
+ ...
+ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP]
+
+ Most output sections do not use most of the optional section
+attributes.
+
+ The whitespace around SECTION is required, so that the section name
+is unambiguous. The colon and the curly braces are also required. The
+line breaks and other white space are optional.
+
+ Each OUTPUT-SECTION-COMMAND may be one of the following:
+
+ * a symbol assignment (*note Assignments::)
+
+ * an input section description (*note Input Section::)
+
+ * data values to include directly (*note Output Section Data::)
+
+ * a special output section keyword (*note Output Section Keywords::)
+
+
+File: ld.info, Node: Output Section Name, Next: Output Section Address, Prev: Output Section Description, Up: SECTIONS
+
+3.6.2 Output Section Name
+-------------------------
+
+The name of the output section is SECTION. SECTION must meet the
+constraints of your output format. In formats which only support a
+limited number of sections, such as `a.out', the name must be one of
+the names supported by the format (`a.out', for example, allows only
+`.text', `.data' or `.bss'). If the output format supports any number
+of sections, but with numbers and not names (as is the case for Oasys),
+the name should be supplied as a quoted numeric string. A section name
+may consist of any sequence of characters, but a name which contains
+any unusual characters such as commas must be quoted.
+
+ The output section name `/DISCARD/' is special; *Note Output Section
+Discarding::.
+
+
+File: ld.info, Node: Output Section Address, Next: Input Section, Prev: Output Section Name, Up: SECTIONS
+
+3.6.3 Output Section Address
+----------------------------
+
+The ADDRESS is an expression for the VMA (the virtual memory address)
+of the output section. If you do not provide ADDRESS, the linker will
+set it based on REGION if present, or otherwise based on the current
+value of the location counter.
+
+ If you provide ADDRESS, the address of the output section will be
+set to precisely that. If you provide neither ADDRESS nor REGION, then
+the address of the output section will be set to the current value of
+the location counter aligned to the alignment requirements of the
+output section. The alignment requirement of the output section is the
+strictest alignment of any input section contained within the output
+section.
+
+ For example,
+ .text . : { *(.text) }
+ and
+ .text : { *(.text) }
+ are subtly different. The first will set the address of the `.text'
+output section to the current value of the location counter. The
+second will set it to the current value of the location counter aligned
+to the strictest alignment of a `.text' input section.
+
+ The ADDRESS may be an arbitrary expression; *Note Expressions::.
+For example, if you want to align the section on a 0x10 byte boundary,
+so that the lowest four bits of the section address are zero, you could
+do something like this:
+ .text ALIGN(0x10) : { *(.text) }
+ This works because `ALIGN' returns the current location counter
+aligned upward to the specified value.
+
+ Specifying ADDRESS for a section will change the value of the
+location counter.
+
+
+File: ld.info, Node: Input Section, Next: Output Section Data, Prev: Output Section Address, Up: SECTIONS
+
+3.6.4 Input Section Description
+-------------------------------
+
+The most common output section command is an input section description.
+
+ The input section description is the most basic linker script
+operation. You use output sections to tell the linker how to lay out
+your program in memory. You use input section descriptions to tell the
+linker how to map the input files into your memory layout.
+
+* Menu:
+
+* Input Section Basics:: Input section basics
+* Input Section Wildcards:: Input section wildcard patterns
+* Input Section Common:: Input section for common symbols
+* Input Section Keep:: Input section and garbage collection
+* Input Section Example:: Input section example
+
+
+File: ld.info, Node: Input Section Basics, Next: Input Section Wildcards, Up: Input Section
+
+3.6.4.1 Input Section Basics
+............................
+
+An input section description consists of a file name optionally followed
+by a list of section names in parentheses.
+
+ The file name and the section name may be wildcard patterns, which we
+describe further below (*note Input Section Wildcards::).
+
+ The most common input section description is to include all input
+sections with a particular name in the output section. For example, to
+include all input `.text' sections, you would write:
+ *(.text)
+ Here the `*' is a wildcard which matches any file name. To exclude
+a list of files from matching the file name wildcard, EXCLUDE_FILE may
+be used to match all files except the ones specified in the
+EXCLUDE_FILE list. For example:
+ (*(EXCLUDE_FILE (*crtend.o *otherfile.o) .ctors))
+ will cause all .ctors sections from all files except `crtend.o' and
+`otherfile.o' to be included.
+
+ There are two ways to include more than one section:
+ *(.text .rdata)
+ *(.text) *(.rdata)
+ The difference between these is the order in which the `.text' and
+`.rdata' input sections will appear in the output section. In the
+first example, they will be intermingled, appearing in the same order as
+they are found in the linker input. In the second example, all `.text'
+input sections will appear first, followed by all `.rdata' input
+sections.
+
+ You can specify a file name to include sections from a particular
+file. You would do this if one or more of your files contain special
+data that needs to be at a particular location in memory. For example:
+ data.o(.data)
+
+ If you use a file name without a list of sections, then all sections
+in the input file will be included in the output section. This is not
+commonly done, but it may by useful on occasion. For example:
+ data.o
+
+ When you use a file name which does not contain any wild card
+characters, the linker will first see if you also specified the file
+name on the linker command line or in an `INPUT' command. If you did
+not, the linker will attempt to open the file as an input file, as
+though it appeared on the command line. Note that this differs from an
+`INPUT' command, because the linker will not search for the file in the
+archive search path.
+
+
+File: ld.info, Node: Input Section Wildcards, Next: Input Section Common, Prev: Input Section Basics, Up: Input Section
+
+3.6.4.2 Input Section Wildcard Patterns
+.......................................
+
+In an input section description, either the file name or the section
+name or both may be wildcard patterns.
+
+ The file name of `*' seen in many examples is a simple wildcard
+pattern for the file name.
+
+ The wildcard patterns are like those used by the Unix shell.
+
+`*'
+ matches any number of characters
+
+`?'
+ matches any single character
+
+`[CHARS]'
+ matches a single instance of any of the CHARS; the `-' character
+ may be used to specify a range of characters, as in `[a-z]' to
+ match any lower case letter
+
+`\'
+ quotes the following character
+
+ When a file name is matched with a wildcard, the wildcard characters
+will not match a `/' character (used to separate directory names on
+Unix). A pattern consisting of a single `*' character is an exception;
+it will always match any file name, whether it contains a `/' or not.
+In a section name, the wildcard characters will match a `/' character.
+
+ File name wildcard patterns only match files which are explicitly
+specified on the command line or in an `INPUT' command. The linker
+does not search directories to expand wildcards.
+
+ If a file name matches more than one wildcard pattern, or if a file
+name appears explicitly and is also matched by a wildcard pattern, the
+linker will use the first match in the linker script. For example, this
+sequence of input section descriptions is probably in error, because the
+`data.o' rule will not be used:
+ .data : { *(.data) }
+ .data1 : { data.o(.data) }
+
+ Normally, the linker will place files and sections matched by
+wildcards in the order in which they are seen during the link. You can
+change this by using the `SORT_BY_NAME' keyword, which appears before a
+wildcard pattern in parentheses (e.g., `SORT_BY_NAME(.text*)'). When
+the `SORT_BY_NAME' keyword is used, the linker will sort the files or
+sections into ascending order by name before placing them in the output
+file.
+
+ `SORT_BY_ALIGNMENT' is very similar to `SORT_BY_NAME'. The
+difference is `SORT_BY_ALIGNMENT' will sort sections into ascending
+order by alignment before placing them in the output file.
+
+ `SORT' is an alias for `SORT_BY_NAME'.
+
+ When there are nested section sorting commands in linker script,
+there can be at most 1 level of nesting for section sorting commands.
+
+ 1. `SORT_BY_NAME' (`SORT_BY_ALIGNMENT' (wildcard section pattern)).
+ It will sort the input sections by name first, then by alignment
+ if 2 sections have the same name.
+
+ 2. `SORT_BY_ALIGNMENT' (`SORT_BY_NAME' (wildcard section pattern)).
+ It will sort the input sections by alignment first, then by name
+ if 2 sections have the same alignment.
+
+ 3. `SORT_BY_NAME' (`SORT_BY_NAME' (wildcard section pattern)) is
+ treated the same as `SORT_BY_NAME' (wildcard section pattern).
+
+ 4. `SORT_BY_ALIGNMENT' (`SORT_BY_ALIGNMENT' (wildcard section
+ pattern)) is treated the same as `SORT_BY_ALIGNMENT' (wildcard
+ section pattern).
+
+ 5. All other nested section sorting commands are invalid.
+
+ When both command line section sorting option and linker script
+section sorting command are used, section sorting command always takes
+precedence over the command line option.
+
+ If the section sorting command in linker script isn't nested, the
+command line option will make the section sorting command to be treated
+as nested sorting command.
+
+ 1. `SORT_BY_NAME' (wildcard section pattern ) with `--sort-sections
+ alignment' is equivalent to `SORT_BY_NAME' (`SORT_BY_ALIGNMENT'
+ (wildcard section pattern)).
+
+ 2. `SORT_BY_ALIGNMENT' (wildcard section pattern) with
+ `--sort-section name' is equivalent to `SORT_BY_ALIGNMENT'
+ (`SORT_BY_NAME' (wildcard section pattern)).
+
+ If the section sorting command in linker script is nested, the
+command line option will be ignored.
+
+ If you ever get confused about where input sections are going, use
+the `-M' linker option to generate a map file. The map file shows
+precisely how input sections are mapped to output sections.
+
+ This example shows how wildcard patterns might be used to partition
+files. This linker script directs the linker to place all `.text'
+sections in `.text' and all `.bss' sections in `.bss'. The linker will
+place the `.data' section from all files beginning with an upper case
+character in `.DATA'; for all other files, the linker will place the
+`.data' section in `.data'.
+ SECTIONS {
+ .text : { *(.text) }
+ .DATA : { [A-Z]*(.data) }
+ .data : { *(.data) }
+ .bss : { *(.bss) }
+ }
+
+
+File: ld.info, Node: Input Section Common, Next: Input Section Keep, Prev: Input Section Wildcards, Up: Input Section
+
+3.6.4.3 Input Section for Common Symbols
+........................................
+
+A special notation is needed for common symbols, because in many object
+file formats common symbols do not have a particular input section. The
+linker treats common symbols as though they are in an input section
+named `COMMON'.
+
+ You may use file names with the `COMMON' section just as with any
+other input sections. You can use this to place common symbols from a
+particular input file in one section while common symbols from other
+input files are placed in another section.
+
+ In most cases, common symbols in input files will be placed in the
+`.bss' section in the output file. For example:
+ .bss { *(.bss) *(COMMON) }
+
+ Some object file formats have more than one type of common symbol.
+For example, the MIPS ELF object file format distinguishes standard
+common symbols and small common symbols. In this case, the linker will
+use a different special section name for other types of common symbols.
+In the case of MIPS ELF, the linker uses `COMMON' for standard common
+symbols and `.scommon' for small common symbols. This permits you to
+map the different types of common symbols into memory at different
+locations.
+
+ You will sometimes see `[COMMON]' in old linker scripts. This
+notation is now considered obsolete. It is equivalent to `*(COMMON)'.
+
+
+File: ld.info, Node: Input Section Keep, Next: Input Section Example, Prev: Input Section Common, Up: Input Section
+
+3.6.4.4 Input Section and Garbage Collection
+............................................
+
+When link-time garbage collection is in use (`--gc-sections'), it is
+often useful to mark sections that should not be eliminated. This is
+accomplished by surrounding an input section's wildcard entry with
+`KEEP()', as in `KEEP(*(.init))' or `KEEP(SORT_BY_NAME(*)(.ctors))'.
+
+
+File: ld.info, Node: Input Section Example, Prev: Input Section Keep, Up: Input Section
+
+3.6.4.5 Input Section Example
+.............................
+
+The following example is a complete linker script. It tells the linker
+to read all of the sections from file `all.o' and place them at the
+start of output section `outputa' which starts at location `0x10000'.
+All of section `.input1' from file `foo.o' follows immediately, in the
+same output section. All of section `.input2' from `foo.o' goes into
+output section `outputb', followed by section `.input1' from `foo1.o'.
+All of the remaining `.input1' and `.input2' sections from any files
+are written to output section `outputc'.
+
+ SECTIONS {
+ outputa 0x10000 :
+ {
+ all.o
+ foo.o (.input1)
+ }
+ outputb :
+ {
+ foo.o (.input2)
+ foo1.o (.input1)
+ }
+ outputc :
+ {
+ *(.input1)
+ *(.input2)
+ }
+ }
+
+
+File: ld.info, Node: Output Section Data, Next: Output Section Keywords, Prev: Input Section, Up: SECTIONS
+
+3.6.5 Output Section Data
+-------------------------
+
+You can include explicit bytes of data in an output section by using
+`BYTE', `SHORT', `LONG', `QUAD', or `SQUAD' as an output section
+command. Each keyword is followed by an expression in parentheses
+providing the value to store (*note Expressions::). The value of the
+expression is stored at the current value of the location counter.
+
+ The `BYTE', `SHORT', `LONG', and `QUAD' commands store one, two,
+four, and eight bytes (respectively). After storing the bytes, the
+location counter is incremented by the number of bytes stored.
+
+ For example, this will store the byte 1 followed by the four byte
+value of the symbol `addr':
+ BYTE(1)
+ LONG(addr)
+
+ When using a 64 bit host or target, `QUAD' and `SQUAD' are the same;
+they both store an 8 byte, or 64 bit, value. When both host and target
+are 32 bits, an expression is computed as 32 bits. In this case `QUAD'
+stores a 32 bit value zero extended to 64 bits, and `SQUAD' stores a 32
+bit value sign extended to 64 bits.
+
+ If the object file format of the output file has an explicit
+endianness, which is the normal case, the value will be stored in that
+endianness. When the object file format does not have an explicit
+endianness, as is true of, for example, S-records, the value will be
+stored in the endianness of the first input object file.
+
+ Note--these commands only work inside a section description and not
+between them, so the following will produce an error from the linker:
+ SECTIONS { .text : { *(.text) } LONG(1) .data : { *(.data) } }
+ whereas this will work:
+ SECTIONS { .text : { *(.text) ; LONG(1) } .data : { *(.data) } }
+
+ You may use the `FILL' command to set the fill pattern for the
+current section. It is followed by an expression in parentheses. Any
+otherwise unspecified regions of memory within the section (for example,
+gaps left due to the required alignment of input sections) are filled
+with the value of the expression, repeated as necessary. A `FILL'
+statement covers memory locations after the point at which it occurs in
+the section definition; by including more than one `FILL' statement,
+you can have different fill patterns in different parts of an output
+section.
+
+ This example shows how to fill unspecified regions of memory with the
+value `0x90':
+ FILL(0x90909090)
+
+ The `FILL' command is similar to the `=FILLEXP' output section
+attribute, but it only affects the part of the section following the
+`FILL' command, rather than the entire section. If both are used, the
+`FILL' command takes precedence. *Note Output Section Fill::, for
+details on the fill expression.
+
+
+File: ld.info, Node: Output Section Keywords, Next: Output Section Discarding, Prev: Output Section Data, Up: SECTIONS
+
+3.6.6 Output Section Keywords
+-----------------------------
+
+There are a couple of keywords which can appear as output section
+commands.
+
+`CREATE_OBJECT_SYMBOLS'
+ The command tells the linker to create a symbol for each input
+ file. The name of each symbol will be the name of the
+ corresponding input file. The section of each symbol will be the
+ output section in which the `CREATE_OBJECT_SYMBOLS' command
+ appears.
+
+ This is conventional for the a.out object file format. It is not
+ normally used for any other object file format.
+
+`CONSTRUCTORS'
+ When linking using the a.out object file format, the linker uses an
+ unusual set construct to support C++ global constructors and
+ destructors. When linking object file formats which do not support
+ arbitrary sections, such as ECOFF and XCOFF, the linker will
+ automatically recognize C++ global constructors and destructors by
+ name. For these object file formats, the `CONSTRUCTORS' command
+ tells the linker to place constructor information in the output
+ section where the `CONSTRUCTORS' command appears. The
+ `CONSTRUCTORS' command is ignored for other object file formats.
+
+ The symbol `__CTOR_LIST__' marks the start of the global
+ constructors, and the symbol `__CTOR_END__' marks the end.
+ Similarly, `__DTOR_LIST__' and `__DTOR_END__' mark the start and
+ end of the global destructors. The first word in the list is the
+ number of entries, followed by the address of each constructor or
+ destructor, followed by a zero word. The compiler must arrange to
+ actually run the code. For these object file formats GNU C++
+ normally calls constructors from a subroutine `__main'; a call to
+ `__main' is automatically inserted into the startup code for
+ `main'. GNU C++ normally runs destructors either by using
+ `atexit', or directly from the function `exit'.
+
+ For object file formats such as `COFF' or `ELF' which support
+ arbitrary section names, GNU C++ will normally arrange to put the
+ addresses of global constructors and destructors into the `.ctors'
+ and `.dtors' sections. Placing the following sequence into your
+ linker script will build the sort of table which the GNU C++
+ runtime code expects to see.
+
+ __CTOR_LIST__ = .;
+ LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
+ *(.ctors)
+ LONG(0)
+ __CTOR_END__ = .;
+ __DTOR_LIST__ = .;
+ LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
+ *(.dtors)
+ LONG(0)
+ __DTOR_END__ = .;
+
+ If you are using the GNU C++ support for initialization priority,
+ which provides some control over the order in which global
+ constructors are run, you must sort the constructors at link time
+ to ensure that they are executed in the correct order. When using
+ the `CONSTRUCTORS' command, use `SORT_BY_NAME(CONSTRUCTORS)'
+ instead. When using the `.ctors' and `.dtors' sections, use
+ `*(SORT_BY_NAME(.ctors))' and `*(SORT_BY_NAME(.dtors))' instead of
+ just `*(.ctors)' and `*(.dtors)'.
+
+ Normally the compiler and linker will handle these issues
+ automatically, and you will not need to concern yourself with
+ them. However, you may need to consider this if you are using C++
+ and writing your own linker scripts.
+
+
+
+File: ld.info, Node: Output Section Discarding, Next: Output Section Attributes, Prev: Output Section Keywords, Up: SECTIONS
+
+3.6.7 Output Section Discarding
+-------------------------------
+
+The linker will not create output section which do not have any
+contents. This is for convenience when referring to input sections that
+may or may not be present in any of the input files. For example:
+ .foo { *(.foo) }
+ will only create a `.foo' section in the output file if there is a
+`.foo' section in at least one input file.
+
+ If you use anything other than an input section description as an
+output section command, such as a symbol assignment, then the output
+section will always be created, even if there are no matching input
+sections.
+
+ The special output section name `/DISCARD/' may be used to discard
+input sections. Any input sections which are assigned to an output
+section named `/DISCARD/' are not included in the output file.
+
+
+File: ld.info, Node: Output Section Attributes, Next: Overlay Description, Prev: Output Section Discarding, Up: SECTIONS
+
+3.6.8 Output Section Attributes
+-------------------------------
+
+We showed above that the full description of an output section looked
+like this:
+ SECTION [ADDRESS] [(TYPE)] :
+ [AT(LMA)] [ALIGN(SECTION_ALIGN)] [SUBALIGN(SUBSECTION_ALIGN)]
+ {
+ OUTPUT-SECTION-COMMAND
+ OUTPUT-SECTION-COMMAND
+ ...
+ } [>REGION] [AT>LMA_REGION] [:PHDR :PHDR ...] [=FILLEXP]
+We've already described SECTION, ADDRESS, and
+OUTPUT-SECTION-COMMAND. In this section we will describe the remaining
+section attributes.
+
+* Menu:
+
+* Output Section Type:: Output section type
+* Output Section LMA:: Output section LMA
+* Forced Output Alignment:: Forced Output Alignment
+* Forced Input Alignment:: Forced Input Alignment
+* Output Section Region:: Output section region
+* Output Section Phdr:: Output section phdr
+* Output Section Fill:: Output section fill
+
+
+File: ld.info, Node: Output Section Type, Next: Output Section LMA, Up: Output Section Attributes
+
+3.6.8.1 Output Section Type
+...........................
+
+Each output section may have a type. The type is a keyword in
+parentheses. The following types are defined:
+
+`NOLOAD'
+ The section should be marked as not loadable, so that it will not
+ be loaded into memory when the program is run.
+
+`DSECT'
+`COPY'
+`INFO'
+`OVERLAY'
+ These type names are supported for backward compatibility, and are
+ rarely used. They all have the same effect: the section should be
+ marked as not allocatable, so that no memory is allocated for the
+ section when the program is run.
+
+ The linker normally sets the attributes of an output section based on
+the input sections which map into it. You can override this by using
+the section type. For example, in the script sample below, the `ROM'
+section is addressed at memory location `0' and does not need to be
+loaded when the program is run. The contents of the `ROM' section will
+appear in the linker output file as usual.
+ SECTIONS {
+ ROM 0 (NOLOAD) : { ... }
+ ...
+ }
+
+
+File: ld.info, Node: Output Section LMA, Next: Forced Output Alignment, Prev: Output Section Type, Up: Output Section Attributes
+
+3.6.8.2 Output Section LMA
+..........................
+
+Every section has a virtual address (VMA) and a load address (LMA); see
+*Note Basic Script Concepts::. The address expression which may appear
+in an output section description sets the VMA (*note Output Section
+Address::).
+
+ The linker will normally set the LMA equal to the VMA. You can
+change that by using the `AT' keyword. The expression LMA that follows
+the `AT' keyword specifies the load address of the section.
+
+ Alternatively, with `AT>LMA_REGION' expression, you may specify a
+memory region for the section's load address. *Note MEMORY::. Note
+that if the section has not had a VMA assigned to it then the linker
+will use the LMA_REGION as the VMA region as well. *Note Output
+Section Region::.
+
+ This feature is designed to make it easy to build a ROM image. For
+example, the following linker script creates three output sections: one
+called `.text', which starts at `0x1000', one called `.mdata', which is
+loaded at the end of the `.text' section even though its VMA is
+`0x2000', and one called `.bss' to hold uninitialized data at address
+`0x3000'. The symbol `_data' is defined with the value `0x2000', which
+shows that the location counter holds the VMA value, not the LMA value.
+
+ SECTIONS
+ {
+ .text 0x1000 : { *(.text) _etext = . ; }
+ .mdata 0x2000 :
+ AT ( ADDR (.text) + SIZEOF (.text) )
+ { _data = . ; *(.data); _edata = . ; }
+ .bss 0x3000 :
+ { _bstart = . ; *(.bss) *(COMMON) ; _bend = . ;}
+ }
+
+ The run-time initialization code for use with a program generated
+with this linker script would include something like the following, to
+copy the initialized data from the ROM image to its runtime address.
+Notice how this code takes advantage of the symbols defined by the
+linker script.
+
+ extern char _etext, _data, _edata, _bstart, _bend;
+ char *src = &_etext;
+ char *dst = &_data;
+
+ /* ROM has data at end of text; copy it. */
+ while (dst < &_edata) {
+ *dst++ = *src++;
+ }
+
+ /* Zero bss */
+ for (dst = &_bstart; dst< &_bend; dst++)
+ *dst = 0;
+
+
+File: ld.info, Node: Forced Output Alignment, Next: Forced Input Alignment, Prev: Output Section LMA, Up: Output Section Attributes
+
+3.6.8.3 Forced Output Alignment
+...............................
+
+You can increase an output section's alignment by using ALIGN.
+
+
+File: ld.info, Node: Forced Input Alignment, Next: Output Section Region, Prev: Forced Output Alignment, Up: Output Section Attributes
+
+3.6.8.4 Forced Input Alignment
+..............................
+
+You can force input section alignment within an output section by using
+SUBALIGN. The value specified overrides any alignment given by input
+sections, whether larger or smaller.
+
+
+File: ld.info, Node: Output Section Region, Next: Output Section Phdr, Prev: Forced Input Alignment, Up: Output Section Attributes
+
+3.6.8.5 Output Section Region
+.............................
+
+You can assign a section to a previously defined region of memory by
+using `>REGION'. *Note MEMORY::.
+
+ Here is a simple example:
+ MEMORY { rom : ORIGIN = 0x1000, LENGTH = 0x1000 }
+ SECTIONS { ROM : { *(.text) } >rom }
+
+
+File: ld.info, Node: Output Section Phdr, Next: Output Section Fill, Prev: Output Section Region, Up: Output Section Attributes
+
+3.6.8.6 Output Section Phdr
+...........................
+
+You can assign a section to a previously defined program segment by
+using `:PHDR'. *Note PHDRS::. If a section is assigned to one or more
+segments, then all subsequent allocated sections will be assigned to
+those segments as well, unless they use an explicitly `:PHDR' modifier.
+You can use `:NONE' to tell the linker to not put the section in any
+segment at all.
+
+ Here is a simple example:
+ PHDRS { text PT_LOAD ; }
+ SECTIONS { .text : { *(.text) } :text }
+
+
+File: ld.info, Node: Output Section Fill, Prev: Output Section Phdr, Up: Output Section Attributes
+
+3.6.8.7 Output Section Fill
+...........................
+
+You can set the fill pattern for an entire section by using `=FILLEXP'.
+FILLEXP is an expression (*note Expressions::). Any otherwise
+unspecified regions of memory within the output section (for example,
+gaps left due to the required alignment of input sections) will be
+filled with the value, repeated as necessary. If the fill expression
+is a simple hex number, ie. a string of hex digit starting with `0x'
+and without a trailing `k' or `M', then an arbitrarily long sequence of
+hex digits can be used to specify the fill pattern; Leading zeros
+become part of the pattern too. For all other cases, including extra
+parentheses or a unary `+', the fill pattern is the four least
+significant bytes of the value of the expression. In all cases, the
+number is big-endian.
+
+ You can also change the fill value with a `FILL' command in the
+output section commands; (*note Output Section Data::).
+
+ Here is a simple example:
+ SECTIONS { .text : { *(.text) } =0x90909090 }
+
+
+File: ld.info, Node: Overlay Description, Prev: Output Section Attributes, Up: SECTIONS
+
+3.6.9 Overlay Description
+-------------------------
+
+An overlay description provides an easy way to describe sections which
+are to be loaded as part of a single memory image but are to be run at
+the same memory address. At run time, some sort of overlay manager will
+copy the overlaid sections in and out of the runtime memory address as
+required, perhaps by simply manipulating addressing bits. This approach
+can be useful, for example, when a certain region of memory is faster
+than another.
+
+ Overlays are described using the `OVERLAY' command. The `OVERLAY'
+command is used within a `SECTIONS' command, like an output section
+description. The full syntax of the `OVERLAY' command is as follows:
+ OVERLAY [START] : [NOCROSSREFS] [AT ( LDADDR )]
+ {
+ SECNAME1
+ {
+ OUTPUT-SECTION-COMMAND
+ OUTPUT-SECTION-COMMAND
+ ...
+ } [:PHDR...] [=FILL]
+ SECNAME2
+ {
+ OUTPUT-SECTION-COMMAND
+ OUTPUT-SECTION-COMMAND
+ ...
+ } [:PHDR...] [=FILL]
+ ...
+ } [>REGION] [:PHDR...] [=FILL]
+
+ Everything is optional except `OVERLAY' (a keyword), and each
+section must have a name (SECNAME1 and SECNAME2 above). The section
+definitions within the `OVERLAY' construct are identical to those
+within the general `SECTIONS' contruct (*note SECTIONS::), except that
+no addresses and no memory regions may be defined for sections within
+an `OVERLAY'.
+
+ The sections are all defined with the same starting address. The
+load addresses of the sections are arranged such that they are
+consecutive in memory starting at the load address used for the
+`OVERLAY' as a whole (as with normal section definitions, the load
+address is optional, and defaults to the start address; the start
+address is also optional, and defaults to the current value of the
+location counter).
+
+ If the `NOCROSSREFS' keyword is used, and there any references among
+the sections, the linker will report an error. Since the sections all
+run at the same address, it normally does not make sense for one
+section to refer directly to another. *Note NOCROSSREFS: Miscellaneous
+Commands.
+
+ For each section within the `OVERLAY', the linker automatically
+defines two symbols. The symbol `__load_start_SECNAME' is defined as
+the starting load address of the section. The symbol
+`__load_stop_SECNAME' is defined as the final load address of the
+section. Any characters within SECNAME which are not legal within C
+identifiers are removed. C (or assembler) code may use these symbols
+to move the overlaid sections around as necessary.
+
+ At the end of the overlay, the value of the location counter is set
+to the start address of the overlay plus the size of the largest
+section.
+
+ Here is an example. Remember that this would appear inside a
+`SECTIONS' construct.
+ OVERLAY 0x1000 : AT (0x4000)
+ {
+ .text0 { o1/*.o(.text) }
+ .text1 { o2/*.o(.text) }
+ }
+This will define both `.text0' and `.text1' to start at address
+0x1000. `.text0' will be loaded at address 0x4000, and `.text1' will
+be loaded immediately after `.text0'. The following symbols will be
+defined: `__load_start_text0', `__load_stop_text0',
+`__load_start_text1', `__load_stop_text1'.
+
+ C code to copy overlay `.text1' into the overlay area might look
+like the following.
+
+ extern char __load_start_text1, __load_stop_text1;
+ memcpy ((char *) 0x1000, &__load_start_text1,
+ &__load_stop_text1 - &__load_start_text1);
+
+ Note that the `OVERLAY' command is just syntactic sugar, since
+everything it does can be done using the more basic commands. The above
+example could have been written identically as follows.
+
+ .text0 0x1000 : AT (0x4000) { o1/*.o(.text) }
+ __load_start_text0 = LOADADDR (.text0);
+ __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0);
+ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) { o2/*.o(.text) }
+ __load_start_text1 = LOADADDR (.text1);
+ __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1);
+ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));
+
+
+File: ld.info, Node: MEMORY, Next: PHDRS, Prev: SECTIONS, Up: Scripts
+
+3.7 MEMORY Command
+==================
+
+The linker's default configuration permits allocation of all available
+memory. You can override this by using the `MEMORY' command.
+
+ The `MEMORY' command describes the location and size of blocks of
+memory in the target. You can use it to describe which memory regions
+may be used by the linker, and which memory regions it must avoid. You
+can then assign sections to particular memory regions. The linker will
+set section addresses based on the memory regions, and will warn about
+regions that become too full. The linker will not shuffle sections
+around to fit into the available regions.
+
+ A linker script may contain at most one use of the `MEMORY' command.
+However, you can define as many blocks of memory within it as you
+wish. The syntax is:
+ MEMORY
+ {
+ NAME [(ATTR)] : ORIGIN = ORIGIN, LENGTH = LEN
+ ...
+ }
+
+ The NAME is a name used in the linker script to refer to the region.
+The region name has no meaning outside of the linker script. Region
+names are stored in a separate name space, and will not conflict with
+symbol names, file names, or section names. Each memory region must
+have a distinct name.
+
+ The ATTR string is an optional list of attributes that specify
+whether to use a particular memory region for an input section which is
+not explicitly mapped in the linker script. As described in *Note
+SECTIONS::, if you do not specify an output section for some input
+section, the linker will create an output section with the same name as
+the input section. If you define region attributes, the linker will use
+them to select the memory region for the output section that it creates.
+
+ The ATTR string must consist only of the following characters:
+`R'
+ Read-only section
+
+`W'
+ Read/write section
+
+`X'
+ Executable section
+
+`A'
+ Allocatable section
+
+`I'
+ Initialized section
+
+`L'
+ Same as `I'
+
+`!'
+ Invert the sense of any of the preceding attributes
+
+ If a unmapped section matches any of the listed attributes other than
+`!', it will be placed in the memory region. The `!' attribute
+reverses this test, so that an unmapped section will be placed in the
+memory region only if it does not match any of the listed attributes.
+
+ The ORIGIN is an numerical expression for the start address of the
+memory region. The expression must evaluate to a constant and it
+cannot involve any symbols. The keyword `ORIGIN' may be abbreviated to
+`org' or `o' (but not, for example, `ORG').
+
+ The LEN is an expression for the size in bytes of the memory region.
+As with the ORIGIN expression, the expression must be numerical only
+and must evaluate to a constant. The keyword `LENGTH' may be
+abbreviated to `len' or `l'.
+
+ In the following example, we specify that there are two memory
+regions available for allocation: one starting at `0' for 256 kilobytes,
+and the other starting at `0x40000000' for four megabytes. The linker
+will place into the `rom' memory region every section which is not
+explicitly mapped into a memory region, and is either read-only or
+executable. The linker will place other sections which are not
+explicitly mapped into a memory region into the `ram' memory region.
+
+ MEMORY
+ {
+ rom (rx) : ORIGIN = 0, LENGTH = 256K
+ ram (!rx) : org = 0x40000000, l = 4M
+ }
+
+ Once you define a memory region, you can direct the linker to place
+specific output sections into that memory region by using the `>REGION'
+output section attribute. For example, if you have a memory region
+named `mem', you would use `>mem' in the output section definition.
+*Note Output Section Region::. If no address was specified for the
+output section, the linker will set the address to the next available
+address within the memory region. If the combined output sections
+directed to a memory region are too large for the region, the linker
+will issue an error message.
+
+ It is possible to access the origin and length of a memory in an
+expression via the `ORIGIN(MEMORY)' and `LENGTH(MEMORY)' functions:
+
+ _fstack = ORIGIN(ram) + LENGTH(ram) - 4;
+
+
+File: ld.info, Node: PHDRS, Next: VERSION, Prev: MEMORY, Up: Scripts
+
+3.8 PHDRS Command
+=================
+
+The ELF object file format uses "program headers", also knows as
+"segments". The program headers describe how the program should be
+loaded into memory. You can print them out by using the `objdump'
+program with the `-p' option.
+
+ When you run an ELF program on a native ELF system, the system loader
+reads the program headers in order to figure out how to load the
+program. This will only work if the program headers are set correctly.
+This manual does not describe the details of how the system loader
+interprets program headers; for more information, see the ELF ABI.
+
+ The linker will create reasonable program headers by default.
+However, in some cases, you may need to specify the program headers more
+precisely. You may use the `PHDRS' command for this purpose. When the
+linker sees the `PHDRS' command in the linker script, it will not
+create any program headers other than the ones specified.
+
+ The linker only pays attention to the `PHDRS' command when
+generating an ELF output file. In other cases, the linker will simply
+ignore `PHDRS'.
+
+ This is the syntax of the `PHDRS' command. The words `PHDRS',
+`FILEHDR', `AT', and `FLAGS' are keywords.
+
+ PHDRS
+ {
+ NAME TYPE [ FILEHDR ] [ PHDRS ] [ AT ( ADDRESS ) ]
+ [ FLAGS ( FLAGS ) ] ;
+ }
+
+ The NAME is used only for reference in the `SECTIONS' command of the
+linker script. It is not put into the output file. Program header
+names are stored in a separate name space, and will not conflict with
+symbol names, file names, or section names. Each program header must
+have a distinct name.
+
+ Certain program header types describe segments of memory which the
+system loader will load from the file. In the linker script, you
+specify the contents of these segments by placing allocatable output
+sections in the segments. You use the `:PHDR' output section attribute
+to place a section in a particular segment. *Note Output Section
+Phdr::.
+
+ It is normal to put certain sections in more than one segment. This
+merely implies that one segment of memory contains another. You may
+repeat `:PHDR', using it once for each segment which should contain the
+section.
+
+ If you place a section in one or more segments using `:PHDR', then
+the linker will place all subsequent allocatable sections which do not
+specify `:PHDR' in the same segments. This is for convenience, since
+generally a whole set of contiguous sections will be placed in a single
+segment. You can use `:NONE' to override the default segment and tell
+the linker to not put the section in any segment at all.
+
+ You may use the `FILEHDR' and `PHDRS' keywords appear after the
+program header type to further describe the contents of the segment.
+The `FILEHDR' keyword means that the segment should include the ELF
+file header. The `PHDRS' keyword means that the segment should include
+the ELF program headers themselves.
+
+ The TYPE may be one of the following. The numbers indicate the
+value of the keyword.
+
+`PT_NULL' (0)
+ Indicates an unused program header.
+
+`PT_LOAD' (1)
+ Indicates that this program header describes a segment to be
+ loaded from the file.
+
+`PT_DYNAMIC' (2)
+ Indicates a segment where dynamic linking information can be found.
+
+`PT_INTERP' (3)
+ Indicates a segment where the name of the program interpreter may
+ be found.
+
+`PT_NOTE' (4)
+ Indicates a segment holding note information.
+
+`PT_SHLIB' (5)
+ A reserved program header type, defined but not specified by the
+ ELF ABI.
+
+`PT_PHDR' (6)
+ Indicates a segment where the program headers may be found.
+
+EXPRESSION
+ An expression giving the numeric type of the program header. This
+ may be used for types not defined above.
+
+ You can specify that a segment should be loaded at a particular
+address in memory by using an `AT' expression. This is identical to the
+`AT' command used as an output section attribute (*note Output Section
+LMA::). The `AT' command for a program header overrides the output
+section attribute.
+
+ The linker will normally set the segment flags based on the sections
+which comprise the segment. You may use the `FLAGS' keyword to
+explicitly specify the segment flags. The value of FLAGS must be an
+integer. It is used to set the `p_flags' field of the program header.
+
+ Here is an example of `PHDRS'. This shows a typical set of program
+headers used on a native ELF system.
+
+ PHDRS
+ {
+ headers PT_PHDR PHDRS ;
+ interp PT_INTERP ;
+ text PT_LOAD FILEHDR PHDRS ;
+ data PT_LOAD ;
+ dynamic PT_DYNAMIC ;
+ }
+
+ SECTIONS
+ {
+ . = SIZEOF_HEADERS;
+ .interp : { *(.interp) } :text :interp
+ .text : { *(.text) } :text
+ .rodata : { *(.rodata) } /* defaults to :text */
+ ...
+ . = . + 0x1000; /* move to a new page in memory */
+ .data : { *(.data) } :data
+ .dynamic : { *(.dynamic) } :data :dynamic
+ ...
+ }
+
+
+File: ld.info, Node: VERSION, Next: Expressions, Prev: PHDRS, Up: Scripts
+
+3.9 VERSION Command
+===================
+
+The linker supports symbol versions when using ELF. Symbol versions are
+only useful when using shared libraries. The dynamic linker can use
+symbol versions to select a specific version of a function when it runs
+a program that may have been linked against an earlier version of the
+shared library.
+
+ You can include a version script directly in the main linker script,
+or you can supply the version script as an implicit linker script. You
+can also use the `--version-script' linker option.
+
+ The syntax of the `VERSION' command is simply
+ VERSION { version-script-commands }
+
+ The format of the version script commands is identical to that used
+by Sun's linker in Solaris 2.5. The version script defines a tree of
+version nodes. You specify the node names and interdependencies in the
+version script. You can specify which symbols are bound to which
+version nodes, and you can reduce a specified set of symbols to local
+scope so that they are not globally visible outside of the shared
+library.
+
+ The easiest way to demonstrate the version script language is with a
+few examples.
+
+ VERS_1.1 {
+ global:
+ foo1;
+ local:
+ old*;
+ original*;
+ new*;
+ };
+
+ VERS_1.2 {
+ foo2;
+ } VERS_1.1;
+
+ VERS_2.0 {
+ bar1; bar2;
+ extern "C++" {
+ ns::*;
+ "int f(int, double)";
+ }
+ } VERS_1.2;
+
+ This example version script defines three version nodes. The first
+version node defined is `VERS_1.1'; it has no other dependencies. The
+script binds the symbol `foo1' to `VERS_1.1'. It reduces a number of
+symbols to local scope so that they are not visible outside of the
+shared library; this is done using wildcard patterns, so that any
+symbol whose name begins with `old', `original', or `new' is matched.
+The wildcard patterns available are the same as those used in the shell
+when matching filenames (also known as "globbing"). However, if you
+specify the symbol name inside double quotes, then the name is treated
+as literal, rather than as a glob pattern.
+
+ Next, the version script defines node `VERS_1.2'. This node depends
+upon `VERS_1.1'. The script binds the symbol `foo2' to the version
+node `VERS_1.2'.
+
+ Finally, the version script defines node `VERS_2.0'. This node
+depends upon `VERS_1.2'. The scripts binds the symbols `bar1' and
+`bar2' are bound to the version node `VERS_2.0'.
+
+ When the linker finds a symbol defined in a library which is not
+specifically bound to a version node, it will effectively bind it to an
+unspecified base version of the library. You can bind all otherwise
+unspecified symbols to a given version node by using `global: *;'
+somewhere in the version script.
+
+ The names of the version nodes have no specific meaning other than
+what they might suggest to the person reading them. The `2.0' version
+could just as well have appeared in between `1.1' and `1.2'. However,
+this would be a confusing way to write a version script.
+
+ Node name can be omited, provided it is the only version node in the
+version script. Such version script doesn't assign any versions to
+symbols, only selects which symbols will be globally visible out and
+which won't.
+
+ { global: foo; bar; local: *; };
+
+ When you link an application against a shared library that has
+versioned symbols, the application itself knows which version of each
+symbol it requires, and it also knows which version nodes it needs from
+each shared library it is linked against. Thus at runtime, the dynamic
+loader can make a quick check to make sure that the libraries you have
+linked against do in fact supply all of the version nodes that the
+application will need to resolve all of the dynamic symbols. In this
+way it is possible for the dynamic linker to know with certainty that
+all external symbols that it needs will be resolvable without having to
+search for each symbol reference.
+
+ The symbol versioning is in effect a much more sophisticated way of
+doing minor version checking that SunOS does. The fundamental problem
+that is being addressed here is that typically references to external
+functions are bound on an as-needed basis, and are not all bound when
+the application starts up. If a shared library is out of date, a
+required interface may be missing; when the application tries to use
+that interface, it may suddenly and unexpectedly fail. With symbol
+versioning, the user will get a warning when they start their program if
+the libraries being used with the application are too old.
+
+ There are several GNU extensions to Sun's versioning approach. The
+first of these is the ability to bind a symbol to a version node in the
+source file where the symbol is defined instead of in the versioning
+script. This was done mainly to reduce the burden on the library
+maintainer. You can do this by putting something like:
+ __asm__(".symver original_foo,foo@VERS_1.1");
+ in the C source file. This renames the function `original_foo' to
+be an alias for `foo' bound to the version node `VERS_1.1'. The
+`local:' directive can be used to prevent the symbol `original_foo'
+from being exported. A `.symver' directive takes precedence over a
+version script.
+
+ The second GNU extension is to allow multiple versions of the same
+function to appear in a given shared library. In this way you can make
+an incompatible change to an interface without increasing the major
+version number of the shared library, while still allowing applications
+linked against the old interface to continue to function.
+
+ To do this, you must use multiple `.symver' directives in the source
+file. Here is an example:
+
+ __asm__(".symver original_foo,foo@");
+ __asm__(".symver old_foo,foo@VERS_1.1");
+ __asm__(".symver old_foo1,foo@VERS_1.2");
+ __asm__(".symver new_foo,foo@@VERS_2.0");
+
+ In this example, `foo@' represents the symbol `foo' bound to the
+unspecified base version of the symbol. The source file that contains
+this example would define 4 C functions: `original_foo', `old_foo',
+`old_foo1', and `new_foo'.
+
+ When you have multiple definitions of a given symbol, there needs to
+be some way to specify a default version to which external references to
+this symbol will be bound. You can do this with the `foo@@VERS_2.0'
+type of `.symver' directive. You can only declare one version of a
+symbol as the default in this manner; otherwise you would effectively
+have multiple definitions of the same symbol.
+
+ If you wish to bind a reference to a specific version of the symbol
+within the shared library, you can use the aliases of convenience
+(i.e., `old_foo'), or you can use the `.symver' directive to
+specifically bind to an external version of the function in question.
+
+ You can also specify the language in the version script:
+
+ VERSION extern "lang" { version-script-commands }
+
+ The supported `lang's are `C', `C++', and `Java'. The linker will
+iterate over the list of symbols at the link time and demangle them
+according to `lang' before matching them to the patterns specified in
+`version-script-commands'.
+
+ Demangled names may contains spaces and other special characters. As
+described above, you can use a glob pattern to match demangled names,
+or you can use a double-quoted string to match the string exactly. In
+the latter case, be aware that minor differences (such as differing
+whitespace) between the version script and the demangler output will
+cause a mismatch. As the exact string generated by the demangler might
+change in the future, even if the mangled name does not, you should
+check that all of your version directives are behaving as you expect
+when you upgrade.
+
+
+File: ld.info, Node: Expressions, Next: Implicit Linker Scripts, Prev: VERSION, Up: Scripts
+
+3.10 Expressions in Linker Scripts
+==================================
+
+The syntax for expressions in the linker script language is identical to
+that of C expressions. All expressions are evaluated as integers. All
+expressions are evaluated in the same size, which is 32 bits if both the
+host and target are 32 bits, and is otherwise 64 bits.
+
+ You can use and set symbol values in expressions.
+
+ The linker defines several special purpose builtin functions for use
+in expressions.
+
+* Menu:
+
+* Constants:: Constants
+* Symbols:: Symbol Names
+* Orphan Sections:: Orphan Sections
+* Location Counter:: The Location Counter
+* Operators:: Operators
+* Evaluation:: Evaluation
+* Expression Section:: The Section of an Expression
+* Builtin Functions:: Builtin Functions
+
+
+File: ld.info, Node: Constants, Next: Symbols, Up: Expressions
+
+3.10.1 Constants
+----------------
+
+All constants are integers.
+
+ As in C, the linker considers an integer beginning with `0' to be
+octal, and an integer beginning with `0x' or `0X' to be hexadecimal.
+The linker considers other integers to be decimal.
+
+ In addition, you can use the suffixes `K' and `M' to scale a
+constant by `1024' or `1024*1024' respectively. For example, the
+following all refer to the same quantity:
+ _fourk_1 = 4K;
+ _fourk_2 = 4096;
+ _fourk_3 = 0x1000;
+
+
+File: ld.info, Node: Symbols, Next: Orphan Sections, Prev: Constants, Up: Expressions
+
+3.10.2 Symbol Names
+-------------------
+
+Unless quoted, symbol names start with a letter, underscore, or period
+and may include letters, digits, underscores, periods, and hyphens.
+Unquoted symbol names must not conflict with any keywords. You can
+specify a symbol which contains odd characters or has the same name as a
+keyword by surrounding the symbol name in double quotes:
+ "SECTION" = 9;
+ "with a space" = "also with a space" + 10;
+
+ Since symbols can contain many non-alphabetic characters, it is
+safest to delimit symbols with spaces. For example, `A-B' is one
+symbol, whereas `A - B' is an expression involving subtraction.
+
+
+File: ld.info, Node: Orphan Sections, Next: Location Counter, Prev: Symbols, Up: Expressions
+
+3.10.3 Orphan Sections
+----------------------
+
+Orphan sections are sections present in the input files which are not
+explicitly placed into the output file by the linker script. The
+linker will still copy these sections into the output file, but it has
+to guess as to where they should be placed. The linker uses a simple
+heuristic to do this. It attempts to place orphan sections after
+non-orphan sections of the same attribute, such as code vs data,
+loadable vs non-loadable, etc. If there is not enough room to do this
+then it places at the end of the file.
+
+ For ELF targets, the attribute of the section includes section type
+as well as section flag.
+
+
+File: ld.info, Node: Location Counter, Next: Operators, Prev: Orphan Sections, Up: Expressions
+
+3.10.4 The Location Counter
+---------------------------
+
+The special linker variable "dot" `.' always contains the current
+output location counter. Since the `.' always refers to a location in
+an output section, it may only appear in an expression within a
+`SECTIONS' command. The `.' symbol may appear anywhere that an
+ordinary symbol is allowed in an expression.
+
+ Assigning a value to `.' will cause the location counter to be
+moved. This may be used to create holes in the output section. The
+location counter may never be moved backwards.
+
+ SECTIONS
+ {
+ output :
+ {
+ file1(.text)
+ . = . + 1000;
+ file2(.text)
+ . += 1000;
+ file3(.text)
+ } = 0x12345678;
+ }
+ In the previous example, the `.text' section from `file1' is located
+at the beginning of the output section `output'. It is followed by a
+1000 byte gap. Then the `.text' section from `file2' appears, also
+with a 1000 byte gap following before the `.text' section from `file3'.
+The notation `= 0x12345678' specifies what data to write in the gaps
+(*note Output Section Fill::).
+
+ Note: `.' actually refers to the byte offset from the start of the
+current containing object. Normally this is the `SECTIONS' statement,
+whose start address is 0, hence `.' can be used as an absolute address.
+If `.' is used inside a section description however, it refers to the
+byte offset from the start of that section, not an absolute address.
+Thus in a script like this:
+
+ SECTIONS
+ {
+ . = 0x100
+ .text: {
+ *(.text)
+ . = 0x200
+ }
+ . = 0x500
+ .data: {
+ *(.data)
+ . += 0x600
+ }
+ }
+
+ The `.text' section will be assigned a starting address of 0x100 and
+a size of exactly 0x200 bytes, even if there is not enough data in the
+`.text' input sections to fill this area. (If there is too much data,
+an error will be produced because this would be an attempt to move `.'
+backwards). The `.data' section will start at 0x500 and it will have
+an extra 0x600 bytes worth of space after the end of the values from
+the `.data' input sections and before the end of the `.data' output
+section itself.
+
+ Setting symbols to the value of the location counter outside of an
+output section statement can result in unexpected values if the linker
+needs to place orphan sections. For example, given the following:
+
+ SECTIONS
+ {
+ start_of_text = . ;
+ .text: { *(.text) }
+ end_of_text = . ;
+
+ start_of_data = . ;
+ .data: { *(.data) }
+ end_of_data = . ;
+ }
+
+ If the linker needs to place some input section, e.g. `.rodata', not
+mentioned in the script, it might choose to place that section between
+`.text' and `.data'. You might think the linker should place `.rodata'
+on the blank line in the above script, but blank lines are of no
+particular significance to the linker. As well, the linker doesn't
+associate the above symbol names with their sections. Instead, it
+assumes that all assignments or other statements belong to the previous
+output section, except for the special case of an assignment to `.'.
+I.e., the linker will place the orphan `.rodata' section as if the
+script was written as follows:
+
+ SECTIONS
+ {
+ start_of_text = . ;
+ .text: { *(.text) }
+ end_of_text = . ;
+
+ start_of_data = . ;
+ .rodata: { *(.rodata) }
+ .data: { *(.data) }
+ end_of_data = . ;
+ }
+
+ This may or may not be the script author's intention for the value of
+`start_of_data'. One way to influence the orphan section placement is
+to assign the location counter to itself, as the linker assumes that an
+assignment to `.' is setting the start address of a following output
+section and thus should be grouped with that section. So you could
+write:
+
+ SECTIONS
+ {
+ start_of_text = . ;
+ .text: { *(.text) }
+ end_of_text = . ;
+
+ . = . ;
+ start_of_data = . ;
+ .data: { *(.data) }
+ end_of_data = . ;
+ }
+
+ Now, the orphan `.rodata' section will be placed between
+`end_of_text' and `start_of_data'.
+
+
+File: ld.info, Node: Operators, Next: Evaluation, Prev: Location Counter, Up: Expressions
+
+3.10.5 Operators
+----------------
+
+The linker recognizes the standard C set of arithmetic operators, with
+the standard bindings and precedence levels:
+ precedence associativity Operators Notes
+ (highest)
+ 1 left ! - ~ (1)
+ 2 left * / %
+ 3 left + -
+ 4 left >> <<
+ 5 left == != > < <= >=
+ 6 left &
+ 7 left |
+ 8 left &&
+ 9 left ||
+ 10 right ? :
+ 11 right &= += -= *= /= (2)
+ (lowest)
+ Notes: (1) Prefix operators (2) *Note Assignments::.
+
+
+File: ld.info, Node: Evaluation, Next: Expression Section, Prev: Operators, Up: Expressions
+
+3.10.6 Evaluation
+-----------------
+
+The linker evaluates expressions lazily. It only computes the value of
+an expression when absolutely necessary.
+
+ The linker needs some information, such as the value of the start
+address of the first section, and the origins and lengths of memory
+regions, in order to do any linking at all. These values are computed
+as soon as possible when the linker reads in the linker script.
+
+ However, other values (such as symbol values) are not known or needed
+until after storage allocation. Such values are evaluated later, when
+other information (such as the sizes of output sections) is available
+for use in the symbol assignment expression.
+
+ The sizes of sections cannot be known until after allocation, so
+assignments dependent upon these are not performed until after
+allocation.
+
+ Some expressions, such as those depending upon the location counter
+`.', must be evaluated during section allocation.
+
+ If the result of an expression is required, but the value is not
+available, then an error results. For example, a script like the
+following
+ SECTIONS
+ {
+ .text 9+this_isnt_constant :
+ { *(.text) }
+ }
+will cause the error message `non constant expression for initial
+address'.
+
+
+File: ld.info, Node: Expression Section, Next: Builtin Functions, Prev: Evaluation, Up: Expressions
+
+3.10.7 The Section of an Expression
+-----------------------------------
+
+When the linker evaluates an expression, the result is either absolute
+or relative to some section. A relative expression is expressed as a
+fixed offset from the base of a section.
+
+ The position of the expression within the linker script determines
+whether it is absolute or relative. An expression which appears within
+an output section definition is relative to the base of the output
+section. An expression which appears elsewhere will be absolute.
+
+ A symbol set to a relative expression will be relocatable if you
+request relocatable output using the `-r' option. That means that a
+further link operation may change the value of the symbol. The symbol's
+section will be the section of the relative expression.
+
+ A symbol set to an absolute expression will retain the same value
+through any further link operation. The symbol will be absolute, and
+will not have any particular associated section.
+
+ You can use the builtin function `ABSOLUTE' to force an expression
+to be absolute when it would otherwise be relative. For example, to
+create an absolute symbol set to the address of the end of the output
+section `.data':
+ SECTIONS
+ {
+ .data : { *(.data) _edata = ABSOLUTE(.); }
+ }
+ If `ABSOLUTE' were not used, `_edata' would be relative to the
+`.data' section.
+
+
+File: ld.info, Node: Builtin Functions, Prev: Expression Section, Up: Expressions
+
+3.10.8 Builtin Functions
+------------------------
+
+The linker script language includes a number of builtin functions for
+use in linker script expressions.
+
+`ABSOLUTE(EXP)'
+ Return the absolute (non-relocatable, as opposed to non-negative)
+ value of the expression EXP. Primarily useful to assign an
+ absolute value to a symbol within a section definition, where
+ symbol values are normally section relative. *Note Expression
+ Section::.
+
+`ADDR(SECTION)'
+ Return the absolute address (the VMA) of the named SECTION. Your
+ script must previously have defined the location of that section.
+ In the following example, `symbol_1' and `symbol_2' are assigned
+ identical values:
+ SECTIONS { ...
+ .output1 :
+ {
+ start_of_output_1 = ABSOLUTE(.);
+ ...
+ }
+ .output :
+ {
+ symbol_1 = ADDR(.output1);
+ symbol_2 = start_of_output_1;
+ }
+ ... }
+
+`ALIGN(ALIGN)'
+`ALIGN(EXP,ALIGN)'
+ Return the location counter (`.') or arbitrary expression aligned
+ to the next ALIGN boundary. The single operand `ALIGN' doesn't
+ change the value of the location counter--it just does arithmetic
+ on it. The two operand `ALIGN' allows an arbitrary expression to
+ be aligned upwards (`ALIGN(ALIGN)' is equivalent to `ALIGN(.,
+ ALIGN)').
+
+ Here is an example which aligns the output `.data' section to the
+ next `0x2000' byte boundary after the preceding section and sets a
+ variable within the section to the next `0x8000' boundary after the
+ input sections:
+ SECTIONS { ...
+ .data ALIGN(0x2000): {
+ *(.data)
+ variable = ALIGN(0x8000);
+ }
+ ... }
+ The first use of `ALIGN' in this example specifies the
+ location of a section because it is used as the optional ADDRESS
+ attribute of a section definition (*note Output Section
+ Address::). The second use of `ALIGN' is used to defines the
+ value of a symbol.
+
+ The builtin function `NEXT' is closely related to `ALIGN'.
+
+`BLOCK(EXP)'
+ This is a synonym for `ALIGN', for compatibility with older linker
+ scripts. It is most often seen when setting the address of an
+ output section.
+
+`DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE)'
+ This is equivalent to either
+ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - 1)))
+ or
+ (ALIGN(MAXPAGESIZE) + (. & (MAXPAGESIZE - COMMONPAGESIZE)))
+ depending on whether the latter uses fewer COMMONPAGESIZE sized
+ pages for the data segment (area between the result of this
+ expression and `DATA_SEGMENT_END') than the former or not. If the
+ latter form is used, it means COMMONPAGESIZE bytes of runtime
+ memory will be saved at the expense of up to COMMONPAGESIZE wasted
+ bytes in the on-disk file.
+
+ This expression can only be used directly in `SECTIONS' commands,
+ not in any output section descriptions and only once in the linker
+ script. COMMONPAGESIZE should be less or equal to MAXPAGESIZE and
+ should be the system page size the object wants to be optimized
+ for (while still working on system page sizes up to MAXPAGESIZE).
+
+ Example:
+ . = DATA_SEGMENT_ALIGN(0x10000, 0x2000);
+
+`DATA_SEGMENT_END(EXP)'
+ This defines the end of data segment for `DATA_SEGMENT_ALIGN'
+ evaluation purposes.
+
+ . = DATA_SEGMENT_END(.);
+
+`DATA_SEGMENT_RELRO_END(OFFSET, EXP)'
+ This defines the end of the `PT_GNU_RELRO' segment when `-z relro'
+ option is used. Second argument is returned. When `-z relro'
+ option is not present, `DATA_SEGMENT_RELRO_END' does nothing,
+ otherwise `DATA_SEGMENT_ALIGN' is padded so that EXP + OFFSET is
+ aligned to the most commonly used page boundary for particular
+ target. If present in the linker script, it must always come in
+ between `DATA_SEGMENT_ALIGN' and `DATA_SEGMENT_END'.
+
+ . = DATA_SEGMENT_RELRO_END(24, .);
+
+`DEFINED(SYMBOL)'
+ Return 1 if SYMBOL is in the linker global symbol table and is
+ defined before the statement using DEFINED in the script, otherwise
+ return 0. You can use this function to provide default values for
+ symbols. For example, the following script fragment shows how to
+ set a global symbol `begin' to the first location in the `.text'
+ section--but if a symbol called `begin' already existed, its value
+ is preserved:
+
+ SECTIONS { ...
+ .text : {
+ begin = DEFINED(begin) ? begin : . ;
+ ...
+ }
+ ...
+ }
+
+`LENGTH(MEMORY)'
+ Return the length of the memory region named MEMORY.
+
+`LOADADDR(SECTION)'
+ Return the absolute LMA of the named SECTION. This is normally
+ the same as `ADDR', but it may be different if the `AT' attribute
+ is used in the output section definition (*note Output Section
+ LMA::).
+
+`MAX(EXP1, EXP2)'
+ Returns the maximum of EXP1 and EXP2.
+
+`MIN(EXP1, EXP2)'
+ Returns the minimum of EXP1 and EXP2.
+
+`NEXT(EXP)'
+ Return the next unallocated address that is a multiple of EXP.
+ This function is closely related to `ALIGN(EXP)'; unless you use
+ the `MEMORY' command to define discontinuous memory for the output
+ file, the two functions are equivalent.
+
+`ORIGIN(MEMORY)'
+ Return the origin of the memory region named MEMORY.
+
+`SEGMENT_START(SEGMENT, DEFAULT)'
+ Return the base address of the named SEGMENT. If an explicit
+ value has been given for this segment (with a command-line `-T'
+ option) that value will be returned; otherwise the value will be
+ DEFAULT. At present, the `-T' command-line option can only be
+ used to set the base address for the "text", "data", and "bss"
+ sections, but you use `SEGMENT_START' with any segment name.
+
+`SIZEOF(SECTION)'
+ Return the size in bytes of the named SECTION, if that section has
+ been allocated. If the section has not been allocated when this is
+ evaluated, the linker will report an error. In the following
+ example, `symbol_1' and `symbol_2' are assigned identical values:
+ SECTIONS{ ...
+ .output {
+ .start = . ;
+ ...
+ .end = . ;
+ }
+ symbol_1 = .end - .start ;
+ symbol_2 = SIZEOF(.output);
+ ... }
+
+`SIZEOF_HEADERS'
+`sizeof_headers'
+ Return the size in bytes of the output file's headers. This is
+ information which appears at the start of the output file. You
+ can use this number when setting the start address of the first
+ section, if you choose, to facilitate paging.
+
+ When producing an ELF output file, if the linker script uses the
+ `SIZEOF_HEADERS' builtin function, the linker must compute the
+ number of program headers before it has determined all the section
+ addresses and sizes. If the linker later discovers that it needs
+ additional program headers, it will report an error `not enough
+ room for program headers'. To avoid this error, you must avoid
+ using the `SIZEOF_HEADERS' function, or you must rework your linker
+ script to avoid forcing the linker to use additional program
+ headers, or you must define the program headers yourself using the
+ `PHDRS' command (*note PHDRS::).
+
+
+File: ld.info, Node: Implicit Linker Scripts, Prev: Expressions, Up: Scripts
+
+3.11 Implicit Linker Scripts
+============================
+
+If you specify a linker input file which the linker can not recognize as
+an object file or an archive file, it will try to read the file as a
+linker script. If the file can not be parsed as a linker script, the
+linker will report an error.
+
+ An implicit linker script will not replace the default linker script.
+
+ Typically an implicit linker script would contain only symbol
+assignments, or the `INPUT', `GROUP', or `VERSION' commands.
+
+ Any input files read because of an implicit linker script will be
+read at the position in the command line where the implicit linker
+script was read. This can affect archive searching.
+
+
+File: ld.info, Node: Machine Dependent, Next: BFD, Prev: Scripts, Up: Top
+
+4 Machine Dependent Features
+****************************
+
+`ld' has additional features on some platforms; the following sections
+describe them. Machines where `ld' has no additional functionality are
+not listed.
+
+* Menu:
+
+
+* H8/300:: `ld' and the H8/300
+
+* i960:: `ld' and the Intel 960 family
+
+* ARM:: `ld' and the ARM family
+
+* HPPA ELF32:: `ld' and HPPA 32-bit ELF
+
+* MMIX:: `ld' and MMIX
+
+* MSP430:: `ld' and MSP430
+
+* PowerPC ELF32:: `ld' and PowerPC 32-bit ELF Support
+
+* PowerPC64 ELF64:: `ld' and PowerPC64 64-bit ELF Support
+
+* TI COFF:: `ld' and TI COFF
+
+* WIN32:: `ld' and WIN32 (cygwin/mingw)
+
+* Xtensa:: `ld' and Xtensa Processors
+
+
+File: ld.info, Node: H8/300, Next: i960, Up: Machine Dependent
+
+4.1 `ld' and the H8/300
+=======================
+
+For the H8/300, `ld' can perform these global optimizations when you
+specify the `--relax' command-line option.
+
+_relaxing address modes_
+ `ld' finds all `jsr' and `jmp' instructions whose targets are
+ within eight bits, and turns them into eight-bit program-counter
+ relative `bsr' and `bra' instructions, respectively.
+
+_synthesizing instructions_
+ `ld' finds all `mov.b' instructions which use the sixteen-bit
+ absolute address form, but refer to the top page of memory, and
+ changes them to use the eight-bit address form. (That is: the
+ linker turns `mov.b `@'AA:16' into `mov.b `@'AA:8' whenever the
+ address AA is in the top page of memory).
+
+_bit manipulation instructions_
+ `ld' finds all bit manipulation instructions like `band, bclr,
+ biand, bild, bior, bist, bixor, bld, bnot, bor, bset, bst, btst,
+ bxor' which use 32 bit and 16 bit absolute address form, but refer
+ to the top page of memory, and changes them to use the 8 bit
+ address form. (That is: the linker turns `bset #xx:3,`@'AA:32'
+ into `bset #xx:3,`@'AA:8' whenever the address AA is in the top
+ page of memory).
+
+_system control instructions_
+ `ld' finds all `ldc.w, stc.w' instrcutions which use the 32 bit
+ absolute address form, but refer to the top page of memory, and
+ changes them to use 16 bit address form. (That is: the linker
+ turns `ldc.w `@'AA:32,ccr' into `ldc.w `@'AA:16,ccr' whenever the
+ address AA is in the top page of memory).
+
+
+File: ld.info, Node: i960, Next: ARM, Prev: H8/300, Up: Machine Dependent
+
+4.2 `ld' and the Intel 960 Family
+=================================
+
+You can use the `-AARCHITECTURE' command line option to specify one of
+the two-letter names identifying members of the 960 family; the option
+specifies the desired output target, and warns of any incompatible
+instructions in the input files. It also modifies the linker's search
+strategy for archive libraries, to support the use of libraries
+specific to each particular architecture, by including in the search
+loop names suffixed with the string identifying the architecture.
+
+ For example, if your `ld' command line included `-ACA' as well as
+`-ltry', the linker would look (in its built-in search paths, and in
+any paths you specify with `-L') for a library with the names
+
+ try
+ libtry.a
+ tryca
+ libtryca.a
+
+The first two possibilities would be considered in any event; the last
+two are due to the use of `-ACA'.
+
+ You can meaningfully use `-A' more than once on a command line, since
+the 960 architecture family allows combination of target architectures;
+each use will add another pair of name variants to search for when `-l'
+specifies a library.
+
+ `ld' supports the `--relax' option for the i960 family. If you
+specify `--relax', `ld' finds all `balx' and `calx' instructions whose
+targets are within 24 bits, and turns them into 24-bit program-counter
+relative `bal' and `cal' instructions, respectively. `ld' also turns
+`cal' instructions into `bal' instructions when it determines that the
+target subroutine is a leaf routine (that is, the target subroutine does
+not itself call any subroutines).
+
+
+File: ld.info, Node: ARM, Next: HPPA ELF32, Prev: i960, Up: Machine Dependent
+
+4.3 `ld' and the ARM family
+===========================
+
+For the ARM, `ld' will generate code stubs to allow functions calls
+betweem ARM and Thumb code. These stubs only work with code that has
+been compiled and assembled with the `-mthumb-interwork' command line
+option. If it is necessary to link with old ARM object files or
+libraries, which have not been compiled with the -mthumb-interwork
+option then the `--support-old-code' command line switch should be
+given to the linker. This will make it generate larger stub functions
+which will work with non-interworking aware ARM code. Note, however,
+the linker does not support generating stubs for function calls to
+non-interworking aware Thumb code.
+
+ The `--thumb-entry' switch is a duplicate of the generic `--entry'
+switch, in that it sets the program's starting address. But it also
+sets the bottom bit of the address, so that it can be branched to using
+a BX instruction, and the program will start executing in Thumb mode
+straight away.
+
+ The `--be8' switch instructs `ld' to generate BE8 format
+executables. This option is only valid when linking big-endian objects.
+The resulting image will contain big-endian data and little-endian code.
+
+ The `R_ARM_TARGET1' relocation is typically used for entries in the
+`.init_array' section. It is interpreted as either `R_ARM_REL32' or
+`R_ARM_ABS32', depending on the target. The `--target1-rel' and
+`--target1-abs' switches override the default.
+
+ The `--target2=type' switch overrides the default definition of the
+`R_ARM_TARGET2' relocation. Valid values for `type', their meanings,
+and target defaults are as follows:
+`rel'
+ `R_ARM_REL32' (arm*-*-elf, arm*-*-eabi)
+
+`abs'
+ `R_ARM_ABS32' (arm*-*-symbianelf)
+
+`got-rel'
+ `R_ARM_GOT_PREL' (arm*-*-linux, arm*-*-*bsd)
+
+ The `R_ARM_V4BX' relocation (defined by the ARM AAELF specification)
+enables objects compiled for the ARMv4 architecture to be
+interworking-safe when linked with other objects compiled for ARMv4t,
+but also allows pure ARMv4 binaries to be built from the same ARMv4
+objects.
+
+ In the latter case, the switch `--fix-v4bx' must be passed to the
+linker, which causes v4t `BX rM' instructions to be rewritten as `MOV
+PC,rM', since v4 processors do not have a `BX' instruction.
+
+ In the former case, the switch should not be used, and `R_ARM_V4BX'
+relocations are ignored.
+
+ The `--use-blx' switch enables the linker to use ARM/Thumb BLX
+instructions (available on ARMv5t and above) in various situations.
+Currently it is used to perform calls via the PLT from Thumb code using
+BLX rather than using BX and a mode-switching stub before each PLT
+entry. This should lead to such calls executing slightly faster.
+
+ This option is enabled implicitly for SymbianOS, so there is no need
+to specify it if you are using that target.
+
+
+File: ld.info, Node: HPPA ELF32, Next: MMIX, Prev: ARM, Up: Machine Dependent
+
+4.4 `ld' and HPPA 32-bit ELF Support
+====================================
+
+When generating a shared library, `ld' will by default generate import
+stubs suitable for use with a single sub-space application. The
+`--multi-subspace' switch causes `ld' to generate export stubs, and
+different (larger) import stubs suitable for use with multiple
+sub-spaces.
+
+ Long branch stubs and import/export stubs are placed by `ld' in stub
+sections located between groups of input sections. `--stub-group-size'
+specifies the maximum size of a group of input sections handled by one
+stub section. Since branch offsets are signed, a stub section may
+serve two groups of input sections, one group before the stub section,
+and one group after it. However, when using conditional branches that
+require stubs, it may be better (for branch prediction) that stub
+sections only serve one group of input sections. A negative value for
+`N' chooses this scheme, ensuring that branches to stubs always use a
+negative offset. Two special values of `N' are recognized, `1' and
+`-1'. These both instruct `ld' to automatically size input section
+groups for the branch types detected, with the same behaviour regarding
+stub placement as other positive or negative values of `N' respectively.
+
+ Note that `--stub-group-size' does not split input sections. A
+single input section larger than the group size specified will of course
+create a larger group (of one section). If input sections are too
+large, it may not be possible for a branch to reach its stub.
+
+
+File: ld.info, Node: MMIX, Next: MSP430, Prev: HPPA ELF32, Up: Machine Dependent
+
+4.5 `ld' and MMIX
+=================
+
+For MMIX, there is a choice of generating `ELF' object files or `mmo'
+object files when linking. The simulator `mmix' understands the `mmo'
+format. The binutils `objcopy' utility can translate between the two
+formats.
+
+ There is one special section, the `.MMIX.reg_contents' section.
+Contents in this section is assumed to correspond to that of global
+registers, and symbols referring to it are translated to special
+symbols, equal to registers. In a final link, the start address of the
+`.MMIX.reg_contents' section corresponds to the first allocated global
+register multiplied by 8. Register `$255' is not included in this
+section; it is always set to the program entry, which is at the symbol
+`Main' for `mmo' files.
+
+ Symbols with the prefix `__.MMIX.start.', for example
+`__.MMIX.start..text' and `__.MMIX.start..data' are special; there must
+be only one each, even if they are local. The default linker script
+uses these to set the default start address of a section.
+
+ Initial and trailing multiples of zero-valued 32-bit words in a
+section, are left out from an mmo file.
+
+
+File: ld.info, Node: MSP430, Next: PowerPC ELF32, Prev: MMIX, Up: Machine Dependent
+
+4.6 `ld' and MSP430
+===================
+
+For the MSP430 it is possible to select the MPU architecture. The flag
+`-m [mpu type]' will select an appropriate linker script for selected
+MPU type. (To get a list of known MPUs just pass `-m help' option to
+the linker).
+
+ The linker will recognize some extra sections which are MSP430
+specific:
+
+``.vectors''
+ Defines a portion of ROM where interrupt vectors located.
+
+``.bootloader''
+ Defines the bootloader portion of the ROM (if applicable). Any
+ code in this section will be uploaded to the MPU.
+
+``.infomem''
+ Defines an information memory section (if applicable). Any code in
+ this section will be uploaded to the MPU.
+
+``.infomemnobits''
+ This is the same as the `.infomem' section except that any code in
+ this section will not be uploaded to the MPU.
+
+``.noinit''
+ Denotes a portion of RAM located above `.bss' section.
+
+ The last two sections are used by gcc.
+
+
+File: ld.info, Node: PowerPC ELF32, Next: PowerPC64 ELF64, Prev: MSP430, Up: Machine Dependent
+
+4.7 `ld' and PowerPC 32-bit ELF Support
+=======================================
+
+Branches on PowerPC processors are limited to a signed 26-bit
+displacement, which may result in `ld' giving `relocation truncated to
+fit' errors with very large programs. `--relax' enables the generation
+of trampolines that can access the entire 32-bit address space. These
+trampolines are inserted at section boundaries, so may not themselves
+be reachable if an input section exceeds 33M in size.
+
+`--bss-plt'
+ Current PowerPC GCC accepts a `-msecure-plt' option that generates
+ code capable of using a newer PLT and GOT layout that has the
+ security advantage of no executable section ever needing to be
+ writable and no writable section ever being executable. PowerPC
+ `ld' will generate this layout, including stubs to access the PLT,
+ if all input files (including startup and static libraries) were
+ compiled with `-msecure-plt'. `--bss-plt' forces the old BSS PLT
+ (and GOT layout) which can give slightly better performance.
+
+`--sdata-got'
+ The new secure PLT and GOT are placed differently relative to other
+ sections compared to older BSS PLT and GOT placement. The
+ location of `.plt' must change because the new secure PLT is an
+ initialized section while the old PLT is uninitialized. The
+ reason for the `.got' change is more subtle: The new placement
+ allows `.got' to be read-only in applications linked with `-z
+ relro -z now'. However, this placement means that `.sdata' cannot
+ always be used in shared libraries, because the PowerPC ABI
+ accesses `.sdata' in shared libraries from the GOT pointer.
+ `--sdata-got' forces the old GOT placement. PowerPC GCC doesn't
+ use `.sdata' in shared libraries, so this option is really only
+ useful for other compilers that may do so.
+
+`--emit-stub-syms'
+ This option causes `ld' to label linker stubs with a local symbol
+ that encodes the stub type and destination.
+
+`--no-tls-optimize'
+ PowerPC `ld' normally performs some optimization of code sequences
+ used to access Thread-Local Storage. Use this option to disable
+ the optimization.
+
+
+File: ld.info, Node: PowerPC64 ELF64, Next: TI COFF, Prev: PowerPC ELF32, Up: Machine Dependent
+
+4.8 `ld' and PowerPC64 64-bit ELF Support
+=========================================
+
+`--stub-group-size'
+ Long branch stubs, PLT call stubs and TOC adjusting stubs are
+ placed by `ld' in stub sections located between groups of input
+ sections. `--stub-group-size' specifies the maximum size of a
+ group of input sections handled by one stub section. Since branch
+ offsets are signed, a stub section may serve two groups of input
+ sections, one group before the stub section, and one group after
+ it. However, when using conditional branches that require stubs,
+ it may be better (for branch prediction) that stub sections only
+ serve one group of input sections. A negative value for `N'
+ chooses this scheme, ensuring that branches to stubs always use a
+ negative offset. Two special values of `N' are recognized, `1'
+ and `-1'. These both instruct `ld' to automatically size input
+ section groups for the branch types detected, with the same
+ behaviour regarding stub placement as other positive or negative
+ values of `N' respectively.
+
+ Note that `--stub-group-size' does not split input sections. A
+ single input section larger than the group size specified will of
+ course create a larger group (of one section). If input sections
+ are too large, it may not be possible for a branch to reach its
+ stub.
+
+`--emit-stub-syms'
+ This option causes `ld' to label linker stubs with a local symbol
+ that encodes the stub type and destination.
+
+`--dotsyms, --no-dotsyms'
+ These two options control how `ld' interprets version patterns in
+ a version script. Older PowerPC64 compilers emitted both a
+ function descriptor symbol with the same name as the function, and
+ a code entry symbol with the name prefixed by a dot (`.'). To
+ properly version a function `foo', the version script thus needs
+ to control both `foo' and `.foo'. The option `--dotsyms', on by
+ default, automatically adds the required dot-prefixed patterns.
+ Use `--no-dotsyms' to disable this feature.
+
+`--no-tls-optimize'
+ PowerPC64 `ld' normally performs some optimization of code
+ sequences used to access Thread-Local Storage. Use this option to
+ disable the optimization.
+
+`--no-opd-optimize'
+ PowerPC64 `ld' normally removes `.opd' section entries
+ corresponding to deleted link-once functions, or functions removed
+ by the action of `--gc-sections' or linker scrip `/DISCARD/'. Use
+ this option to disable `.opd' optimization.
+
+`--non-overlapping-opd'
+ Some PowerPC64 compilers have an option to generate compressed
+ `.opd' entries spaced 16 bytes apart, overlapping the third word,
+ the static chain pointer (unused in C) with the first word of the
+ next entry. This option expands such entries to the full 24 bytes.
+
+`--no-toc-optimize'
+ PowerPC64 `ld' normally removes unused `.toc' section entries.
+ Such entries are detected by examining relocations that reference
+ the TOC in code sections. A reloc in a deleted code section marks
+ a TOC word as unneeded, while a reloc in a kept code section marks
+ a TOC word as needed. Since the TOC may reference itself, TOC
+ relocs are also examined. TOC words marked as both needed and
+ unneeded will of course be kept. TOC words without any referencing
+ reloc are assumed to be part of a multi-word entry, and are kept or
+ discarded as per the nearest marked preceding word. This works
+ reliably for compiler generated code, but may be incorrect if
+ assembly code is used to insert TOC entries. Use this option to
+ disable the optimization.
+
+`--no-multi-toc'
+ By default, PowerPC64 GCC generates code for a TOC model where TOC
+ entries are accessed with a 16-bit offset from r2. This limits the
+ total TOC size to 64K. PowerPC64 `ld' extends this limit by
+ grouping code sections such that each group uses less than 64K for
+ its TOC entries, then inserts r2 adjusting stubs between
+ inter-group calls. `ld' does not split apart input sections, so
+ cannot help if a single input file has a `.toc' section that
+ exceeds 64K, most likely from linking multiple files with `ld -r'.
+ Use this option to turn off this feature.
+
+
+File: ld.info, Node: TI COFF, Next: WIN32, Prev: PowerPC64 ELF64, Up: Machine Dependent
+
+4.9 `ld''s Support for Various TI COFF Versions
+===============================================
+
+The `--format' switch allows selection of one of the various TI COFF
+versions. The latest of this writing is 2; versions 0 and 1 are also
+supported. The TI COFF versions also vary in header byte-order format;
+`ld' will read any version or byte order, but the output header format
+depends on the default specified by the specific target.
+
+
+File: ld.info, Node: WIN32, Next: Xtensa, Prev: TI COFF, Up: Machine Dependent
+
+4.10 `ld' and WIN32 (cygwin/mingw)
+==================================
+
+This section describes some of the win32 specific `ld' issues. See
+*Note Command Line Options: Options. for detailed decription of the
+command line options mentioned here.
+
+_import libraries_
+ The standard Windows linker creates and uses so-called import
+ libraries, which contains information for linking to dll's. They
+ are regular static archives and are handled as any other static
+ archive. The cygwin and mingw ports of `ld' have specific support
+ for creating such libraries provided with the `--out-implib'
+ command line option.
+
+_exporting DLL symbols_
+ The cygwin/mingw `ld' has several ways to export symbols for dll's.
+
+ _using auto-export functionality_
+ By default `ld' exports symbols with the auto-export
+ functionality, which is controlled by the following command
+ line options:
+
+ * -export-all-symbols [This is the default]
+
+ * -exclude-symbols
+
+ * -exclude-libs
+
+ If, however, `--export-all-symbols' is not given explicitly
+ on the command line, then the default auto-export behavior
+ will be _disabled_ if either of the following are true:
+
+ * A DEF file is used.
+
+ * Any symbol in any object file was marked with the
+ __declspec(dllexport) attribute.
+
+ _using a DEF file_
+ Another way of exporting symbols is using a DEF file. A DEF
+ file is an ASCII file containing definitions of symbols which
+ should be exported when a dll is created. Usually it is
+ named `<dll name>.def' and is added as any other object file
+ to the linker's command line. The file's name must end in
+ `.def' or `.DEF'.
+
+ gcc -o <output> <objectfiles> <dll name>.def
+
+ Using a DEF file turns off the normal auto-export behavior,
+ unless the `--export-all-symbols' option is also used.
+
+ Here is an example of a DEF file for a shared library called
+ `xyz.dll':
+
+ LIBRARY "xyz.dll" BASE=0x20000000
+
+ EXPORTS
+ foo
+ bar
+ _bar = bar
+ another_foo = abc.dll.afoo
+ var1 DATA
+
+ This example defines a DLL with a non-default base address
+ and five symbols in the export table. The third exported
+ symbol `_bar' is an alias for the second. The fourth symbol,
+ `another_foo' is resolved by "forwarding" to another module
+ and treating it as an alias for `afoo' exported from the DLL
+ `abc.dll'. The final symbol `var1' is declared to be a data
+ object.
+
+ The optional `LIBRARY <name>' command indicates the _internal_
+ name of the output DLL. If `<name>' does not include a suffix,
+ the default library suffix, `.DLL' is appended.
+
+ When the .DEF file is used to build an application. rather
+ than a library, the `NAME <name>' command shoud be used
+ instead of `LIBRARY'. If `<name>' does not include a suffix,
+ the default executable suffix, `.EXE' is appended.
+
+ With either `LIBRARY <name>' or `NAME <name>' the optional
+ specification `BASE = <number>' may be used to specify a
+ non-default base address for the image.
+
+ If neither `LIBRARY <name>' nor `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:
+
+ EXPORTS
+ ( ( ( <name1> [ = <name2> ] )
+ | ( <name1> = <module-name> . <external-name>))
+ [ @ <integer> ] [NONAME] [DATA] [CONSTANT] [PRIVATE] ) *
+
+ Declares `<name1>' as an exported symbol from the DLL, or
+ declares `<name1>' as an exported alias for `<name2>'; or
+ declares `<name1>' as a "forward" alias for the symbol
+ `<external-name>' in the DLL `<module-name>'. Optionally,
+ the symbol may be exported by the specified ordinal
+ `<integer>' alias.
+
+ The optional keywords that follow the declaration indicate:
+
+ `NONAME': Do not put the symbol name in the DLL's export
+ table. It will still be exported by its ordinal alias
+ (either the value specified by the .def specification or,
+ otherwise, the value assigned by the linker). The symbol
+ name, however, does remain visible in the import library (if
+ any), unless `PRIVATE' is also specified.
+
+ `DATA': The symbol is a variable or object, rather than a
+ function. The import lib will export only an indirect
+ reference to `foo' as the symbol `_imp__foo' (ie, `foo' must
+ be resolved as `*_imp__foo').
+
+ `CONSTANT': Like `DATA', but put the undecorated `foo' as
+ well as `_imp__foo' into the import library. Both refer to the
+ read-only import address table's pointer to the variable, not
+ to the variable itself. This can be dangerous. If the user
+ code fails to add the `dllimport' attribute and also fails to
+ explicitly add the extra indirection that the use of the
+ attribute enforces, the application will behave unexpectedly.
+
+ `PRIVATE': Put the symbol in the DLL's export table, but do
+ not put it into the static import library used to resolve
+ imports at link time. The symbol can still be imported using
+ the `LoadLibrary/GetProcAddress' API at runtime or by by
+ using the GNU ld extension of linking directly to the DLL
+ without an import library.
+
+ See ld/deffilep.y in the binutils sources for the full
+ specification of other DEF file statements
+
+ While linking a shared dll, `ld' is able to create a DEF file
+ with the `--output-def <file>' command line option.
+
+ _Using decorations_
+ Another way of marking symbols for export is to modify the
+ source code itself, so that when building the DLL each symbol
+ to be exported is declared as:
+
+ __declspec(dllexport) int a_variable
+ __declspec(dllexport) void a_function(int with_args)
+
+ All such symbols will be exported from the DLL. If, however,
+ any of the object files in the DLL contain symbols decorated
+ in this way, then the normal auto-export behavior is
+ disabled, unless the `--export-all-symbols' option is also
+ used.
+
+ Note that object files that wish to access these symbols must
+ _not_ decorate them with dllexport. Instead, they should use
+ dllimport, instead:
+
+ __declspec(dllimport) int a_variable
+ __declspec(dllimport) void a_function(int with_args)
+
+ This complicates the structure of library header files,
+ because when included by the library itself the header must
+ declare the variables and functions as dllexport, but when
+ included by client code the header must declare them as
+ dllimport. There are a number of idioms that are typically
+ used to do this; often client code can omit the __declspec()
+ declaration completely. See `--enable-auto-import' and
+ `automatic data imports' for more imformation.
+
+_automatic data imports_
+ The standard Windows dll format supports data imports from dlls
+ only by adding special decorations (dllimport/dllexport), which
+ let the compiler produce specific assembler instructions to deal
+ with this issue. This increases the effort necessary to port
+ existing Un*x code to these platforms, especially for large c++
+ libraries and applications. The auto-import feature, which was
+ initially provided by Paul Sokolovsky, allows one to omit the
+ decorations to archieve a behavior that conforms to that on
+ POSIX/Un*x platforms. This feature is enabled with the
+ `--enable-auto-import' command-line option, although it is enabled
+ by default on cygwin/mingw. The `--enable-auto-import' option
+ itself now serves mainly to suppress any warnings that are
+ ordinarily emitted when linked objects trigger the feature's use.
+
+ auto-import of variables does not always work flawlessly without
+ additional assistance. Sometimes, you will see this message
+
+ "variable '<var>' can't be auto-imported. Please read the
+ documentation for ld's `--enable-auto-import' for details."
+
+ The `--enable-auto-import' documentation explains why this error
+ occurs, and several methods that can be used to overcome this
+ difficulty. One of these methods is the _runtime pseudo-relocs_
+ feature, described below.
+
+ For complex variables imported from DLLs (such as structs or
+ classes), object files typically contain a base address for the
+ variable and an offset (_addend_) within the variable-to specify a
+ particular field or public member, for instance. Unfortunately,
+ the runtime loader used in win32 environments is incapable of
+ fixing these references at runtime without the additional
+ information supplied by dllimport/dllexport decorations. The
+ standard auto-import feature described above is unable to resolve
+ these references.
+
+ The `--enable-runtime-pseudo-relocs' switch allows these
+ references to be resolved without error, while leaving the task of
+ adjusting the references themselves (with their non-zero addends)
+ to specialized code provided by the runtime environment. Recent
+ versions of the cygwin and mingw environments and compilers
+ provide this runtime support; older versions do not. However, the
+ support is only necessary on the developer's platform; the
+ compiled result will run without error on an older system.
+
+ `--enable-runtime-pseudo-relocs' is not the default; it must be
+ explicitly enabled as needed.
+
+_direct linking to a dll_
+ The cygwin/mingw ports of `ld' support the direct linking,
+ including data symbols, to a dll without the usage of any import
+ libraries. This is much faster and uses much less memory than
+ does the traditional import library method, expecially when
+ linking large libraries or applications. When `ld' creates an
+ import lib, each function or variable exported from the dll is
+ stored in its own bfd, even though a single bfd could contain many
+ exports. The overhead involved in storing, loading, and
+ processing so many bfd's is quite large, and explains the
+ tremendous time, memory, and storage needed to link against
+ particularly large or complex libraries when using import libs.
+
+ Linking directly to a dll uses no extra command-line switches
+ other than `-L' and `-l', because `ld' already searches for a
+ number of names to match each library. All that is needed from
+ the developer's perspective is an understanding of this search, in
+ order to force ld to select the dll instead of an import library.
+
+ For instance, when ld is called with the argument `-lxxx' it will
+ attempt to find, in the first directory of its search path,
+
+ libxxx.dll.a
+ xxx.dll.a
+ libxxx.a
+ cygxxx.dll (*)
+ libxxx.dll
+ xxx.dll
+
+ before moving on to the next directory in the search path.
+
+ (*) Actually, this is not `cygxxx.dll' but in fact is
+ `<prefix>xxx.dll', where `<prefix>' is set by the `ld' option
+ `--dll-search-prefix=<prefix>'. In the case of cygwin, the
+ standard gcc spec file includes `--dll-search-prefix=cyg', so in
+ effect we actually search for `cygxxx.dll'.
+
+ Other win32-based unix environments, such as mingw or pw32, may
+ use other `<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 `bin' directory for
+ applications and dll's and a `lib' directory for the import
+ libraries (using cygwin nomenclature):
+
+ bin/
+ cygxxx.dll
+ lib/
+ libxxx.dll.a (in case of dll's)
+ libxxx.a (in case of static archive)
+
+ Linking directly to a dll without using the import library can be
+ done two ways:
+
+ 1. Use the dll directly by adding the `bin' path to the link line
+ gcc -Wl,-verbose -o a.exe -L../bin/ -lxxx
+
+ However, as the dll's often have version numbers appended to their
+ names (`cygncurses-5.dll') this will often fail, unless one
+ specifies `-L../bin -lncurses-5' to include the version. Import
+ libs are generally not versioned, and do not have this difficulty.
+
+ 2. Create a symbolic link from the dll to a file in the `lib'
+ directory according to the above mentioned search pattern. This
+ should be used to avoid unwanted changes in the tools needed for
+ making the app/dll.
+
+ ln -s bin/cygxxx.dll lib/[cyg|lib|]xxx.dll[.a]
+
+ Then you can link without any make environment changes.
+
+ gcc -Wl,-verbose -o a.exe -L../lib/ -lxxx
+
+ This technique also avoids the version number problems, because
+ the following is perfectly legal
+
+ bin/
+ cygxxx-5.dll
+ lib/
+ libxxx.dll.a -> ../bin/cygxxx-5.dll
+
+ Linking directly to a dll without using an import lib will work
+ even when auto-import features are exercised, and even when
+ `--enable-runtime-pseudo-relocs' is used.
+
+ Given the improvements in speed and memory usage, one might
+ justifiably wonder why import libraries are used at all. There
+ are two reasons:
+
+ 1. Until recently, the link-directly-to-dll functionality did _not_
+ work with auto-imported data.
+
+ 2. Sometimes it is necessary to include pure static objects within
+ the import library (which otherwise contains only bfd's for
+ indirection symbols that point to the exports of a dll). Again,
+ the import lib for the cygwin kernel makes use of this ability,
+ and it is not possible to do this without an import lib.
+
+ So, import libs are not going away. But the ability to replace
+ true import libs with a simple symbolic link to (or a copy of) a
+ dll, in most cases, is a useful addition to the suite of tools
+ binutils makes available to the win32 developer. Given the
+ massive improvements in memory requirements during linking, storage
+ requirements, and linking speed, we expect that many developers
+ will soon begin to use this feature whenever possible.
+
+_symbol aliasing_
+
+ _adding additional names_
+ Sometimes, it is useful to export symbols with additional
+ names. A symbol `foo' will be exported as `foo', but it can
+ also be exported as `_foo' by using special directives in the
+ DEF file when creating the dll. This will affect also the
+ optional created import library. Consider the following DEF
+ file:
+
+ LIBRARY "xyz.dll" BASE=0x61000000
+
+ EXPORTS
+ foo
+ _foo = foo
+
+ The line `_foo = foo' maps the symbol `foo' to `_foo'.
+
+ Another method for creating a symbol alias is to create it in
+ the source code using the "weak" attribute:
+
+ void foo () { /* Do something. */; }
+ void _foo () __attribute__ ((weak, alias ("foo")));
+
+ See the gcc manual for more information about attributes and
+ weak symbols.
+
+ _renaming symbols_
+ Sometimes it is useful to rename exports. For instance, the
+ cygwin kernel does this regularly. A symbol `_foo' can be
+ exported as `foo' but not as `_foo' by using special
+ directives in the DEF file. (This will also affect the import
+ library, if it is created). In the following example:
+
+ LIBRARY "xyz.dll" BASE=0x61000000
+
+ EXPORTS
+ _foo = foo
+
+ The line `_foo = foo' maps the exported symbol `foo' to
+ `_foo'.
+
+ Note: using a DEF file disables the default auto-export behavior,
+ unless the `--export-all-symbols' command line option is used.
+ If, however, you are trying to rename symbols, then you should list
+ _all_ desired exports in the DEF file, including the symbols that
+ are not being renamed, and do _not_ use the `--export-all-symbols'
+ option. If you list only the renamed symbols in the DEF file, and
+ use `--export-all-symbols' to handle the other symbols, then the
+ both the new names _and_ the original names for the renamed
+ symbols will be exported. In effect, you'd be aliasing those
+ symbols, not renaming them, which is probably not what you wanted.
+
+_weak externals_
+ The Windows object format, PE, specifies a form of weak symbols
+ called weak externals. When a weak symbol is linked and the
+ symbol is not defined, the weak symbol becomes an alias for some
+ other symbol. There are three variants of weak externals:
+ * Definition is searched for in objects and libraries,
+ historically called lazy externals.
+
+ * Definition is searched for only in other objects, not in
+ libraries. This form is not presently implemented.
+
+ * No search; the symbol is an alias. This form is not presently
+ implemented.
+ As a GNU extension, weak symbols that do not specify an alternate
+ symbol are supported. If the symbol is undefined when linking,
+ the symbol uses a default value.
+
+
+File: ld.info, Node: Xtensa, Prev: WIN32, Up: Machine Dependent
+
+4.11 `ld' and Xtensa Processors
+===============================
+
+The default `ld' behavior for Xtensa processors is to interpret
+`SECTIONS' commands so that lists of explicitly named sections in a
+specification with a wildcard file will be interleaved when necessary to
+keep literal pools within the range of PC-relative load offsets. For
+example, with the command:
+
+ SECTIONS
+ {
+ .text : {
+ *(.literal .text)
+ }
+ }
+
+`ld' may interleave some of the `.literal' and `.text' sections from
+different object files to ensure that the literal pools are within the
+range of PC-relative load offsets. A valid interleaving might place
+the `.literal' sections from an initial group of files followed by the
+`.text' sections of that group of files. Then, the `.literal' sections
+from the rest of the files and the `.text' sections from the rest of
+the files would follow.
+
+ Relaxation is enabled by default for the Xtensa version of `ld' and
+provides two important link-time optimizations. The first optimization
+is to combine identical literal values to reduce code size. A redundant
+literal will be removed and all the `L32R' instructions that use it
+will be changed to reference an identical literal, as long as the
+location of the replacement literal is within the offset range of all
+the `L32R' instructions. The second optimization is to remove
+unnecessary overhead from assembler-generated "longcall" sequences of
+`L32R'/`CALLXN' when the target functions are within range of direct
+`CALLN' instructions.
+
+ For each of these cases where an indirect call sequence can be
+optimized to a direct call, the linker will change the `CALLXN'
+instruction to a `CALLN' instruction, remove the `L32R' instruction,
+and remove the literal referenced by the `L32R' instruction if it is
+not used for anything else. Removing the `L32R' instruction always
+reduces code size but can potentially hurt performance by changing the
+alignment of subsequent branch targets. By default, the linker will
+always preserve alignments, either by switching some instructions
+between 24-bit encodings and the equivalent density instructions or by
+inserting a no-op in place of the `L32R' instruction that was removed.
+If code size is more important than performance, the `--size-opt'
+option can be used to prevent the linker from widening density
+instructions or inserting no-ops, except in a few cases where no-ops
+are required for correctness.
+
+ The following Xtensa-specific command-line options can be used to
+control the linker:
+
+`--no-relax'
+ Since the Xtensa version of `ld' enables the `--relax' option by
+ default, the `--no-relax' option is provided to disable relaxation.
+
+`--size-opt'
+ When optimizing indirect calls to direct calls, optimize for code
+ size more than performance. With this option, the linker will not
+ insert no-ops or widen density instructions to preserve branch
+ target alignment. There may still be some cases where no-ops are
+ required to preserve the correctness of the code.
+
+
+File: ld.info, Node: BFD, Next: Reporting Bugs, Prev: Machine Dependent, Up: Top
+
+5 BFD
+*****
+
+The linker accesses object and archive files using the BFD libraries.
+These libraries allow the linker to use the same routines to operate on
+object files whatever the object file format. A different object file
+format can be supported simply by creating a new BFD back end and adding
+it to the library. To conserve runtime memory, however, the linker and
+associated tools are usually configured to support only a subset of the
+object file formats available. You can use `objdump -i' (*note
+objdump: (binutils.info)objdump.) to list all the formats available for
+your configuration.
+
+ As with most implementations, BFD is a compromise between several
+conflicting requirements. The major factor influencing BFD design was
+efficiency: any time used converting between formats is time which
+would not have been spent had BFD not been involved. This is partly
+offset by abstraction payback; since BFD simplifies applications and
+back ends, more time and care may be spent optimizing algorithms for a
+greater speed.
+
+ One minor artifact of the BFD solution which you should bear in mind
+is the potential for information loss. There are two places where
+useful information can be lost using the BFD mechanism: during
+conversion and during output. *Note BFD information loss::.
+
+* Menu:
+
+* BFD outline:: How it works: an outline of BFD
+
+
+File: ld.info, Node: BFD outline, Up: BFD
+
+5.1 How It Works: An Outline of BFD
+===================================
+
+When an object file is opened, BFD subroutines automatically determine
+the format of the input object file. They then build a descriptor in
+memory with pointers to routines that will be used to access elements of
+the object file's data structures.
+
+ As different information from the object files is required, BFD
+reads from different sections of the file and processes them. For
+example, a very common operation for the linker is processing symbol
+tables. Each BFD back end provides a routine for converting between
+the object file's representation of symbols and an internal canonical
+format. When the linker asks for the symbol table of an object file, it
+calls through a memory pointer to the routine from the relevant BFD
+back end which reads and converts the table into a canonical form. The
+linker then operates upon the canonical form. When the link is finished
+and the linker writes the output file's symbol table, another BFD back
+end routine is called to take the newly created symbol table and
+convert it into the chosen output format.
+
+* Menu:
+
+* BFD information loss:: Information Loss
+* Canonical format:: The BFD canonical object-file format
+
+
+File: ld.info, Node: BFD information loss, Next: Canonical format, Up: BFD outline
+
+5.1.1 Information Loss
+----------------------
+
+_Information can be lost during output._ The output formats supported
+by BFD do not provide identical facilities, and information which can
+be described in one form has nowhere to go in another format. One
+example of this is alignment information in `b.out'. There is nowhere
+in an `a.out' format file to store alignment information on the
+contained data, so when a file is linked from `b.out' and an `a.out'
+image is produced, alignment information will not propagate to the
+output file. (The linker will still use the alignment information
+internally, so the link is performed correctly).
+
+ Another example is COFF section names. COFF files may contain an
+unlimited number of sections, each one with a textual section name. If
+the target of the link is a format which does not have many sections
+(e.g., `a.out') or has sections without names (e.g., the Oasys format),
+the link cannot be done simply. You can circumvent this problem by
+describing the desired input-to-output section mapping with the linker
+command language.
+
+ _Information can be lost during canonicalization._ The BFD internal
+canonical form of the external formats is not exhaustive; there are
+structures in input formats for which there is no direct representation
+internally. This means that the BFD back ends cannot maintain all
+possible data richness through the transformation between external to
+internal and back to external formats.
+
+ This limitation is only a problem when an application reads one
+format and writes another. Each BFD back end is responsible for
+maintaining as much data as possible, and the internal BFD canonical
+form has structures which are opaque to the BFD core, and exported only
+to the back ends. When a file is read in one format, the canonical form
+is generated for BFD and the application. At the same time, the back
+end saves away any information which may otherwise be lost. If the data
+is then written back in the same format, the back end routine will be
+able to use the canonical form provided by the BFD core as well as the
+information it prepared earlier. Since there is a great deal of
+commonality between back ends, there is no information lost when
+linking or copying big endian COFF to little endian COFF, or `a.out' to
+`b.out'. When a mixture of formats is linked, the information is only
+lost from the files whose format differs from the destination.
+
+
+File: ld.info, Node: Canonical format, Prev: BFD information loss, Up: BFD outline
+
+5.1.2 The BFD canonical object-file format
+------------------------------------------
+
+The greatest potential for loss of information occurs when there is the
+least overlap between the information provided by the source format,
+that stored by the canonical format, and that needed by the destination
+format. A brief description of the canonical form may help you
+understand which kinds of data you can count on preserving across
+conversions.
+
+_files_
+ Information stored on a per-file basis includes target machine
+ architecture, particular implementation format type, a demand
+ pageable bit, and a write protected bit. Information like Unix
+ magic numbers is not stored here--only the magic numbers' meaning,
+ so a `ZMAGIC' file would have both the demand pageable bit and the
+ write protected text bit set. The byte order of the target is
+ stored on a per-file basis, so that big- and little-endian object
+ files may be used with one another.
+
+_sections_
+ Each section in the input file contains the name of the section,
+ the section's original address in the object file, size and
+ alignment information, various flags, and pointers into other BFD
+ data structures.
+
+_symbols_
+ Each symbol contains a pointer to the information for the object
+ file which originally defined it, its name, its value, and various
+ flag bits. When a BFD back end reads in a symbol table, it
+ relocates all symbols to make them relative to the base of the
+ section where they were defined. Doing this ensures that each
+ symbol points to its containing section. Each symbol also has a
+ varying amount of hidden private data for the BFD back end. Since
+ the symbol points to the original file, the private data format
+ for that symbol is accessible. `ld' can operate on a collection
+ of symbols of wildly different formats without problems.
+
+ Normal global and simple local symbols are maintained on output,
+ so an output file (no matter its format) will retain symbols
+ pointing to functions and to global, static, and common variables.
+ Some symbol information is not worth retaining; in `a.out', type
+ information is stored in the symbol table as long symbol names.
+ This information would be useless to most COFF debuggers; the
+ linker has command line switches to allow users to throw it away.
+
+ There is one word of type information within the symbol, so if the
+ format supports symbol type information within symbols (for
+ example, COFF, IEEE, Oasys) and the type is simple enough to fit
+ within one word (nearly everything but aggregates), the
+ information will be preserved.
+
+_relocation level_
+ Each canonical BFD relocation record contains a pointer to the
+ symbol to relocate to, the offset of the data to relocate, the
+ section the data is in, and a pointer to a relocation type
+ descriptor. Relocation is performed by passing messages through
+ the relocation type descriptor and the symbol pointer. Therefore,
+ relocations can be performed on output data using a relocation
+ method that is only available in one of the input formats. For
+ instance, Oasys provides a byte relocation format. A relocation
+ record requesting this relocation type would point indirectly to a
+ routine to perform this, so the relocation may be performed on a
+ byte being written to a 68k COFF file, even though 68k COFF has no
+ such relocation type.
+
+_line numbers_
+ Object formats can contain, for debugging purposes, some form of
+ mapping between symbols, source line numbers, and addresses in the
+ output file. These addresses have to be relocated along with the
+ symbol information. Each symbol with an associated list of line
+ number records points to the first record of the list. The head
+ of a line number list consists of a pointer to the symbol, which
+ allows finding out the address of the function whose line number
+ is being described. The rest of the list is made up of pairs:
+ offsets into the section and line numbers. Any format which can
+ simply derive this information can pass it successfully between
+ formats (COFF, IEEE and Oasys).
+
+
+File: ld.info, Node: Reporting Bugs, Next: MRI, Prev: BFD, Up: Top
+
+6 Reporting Bugs
+****************
+
+Your bug reports play an essential role in making `ld' reliable.
+
+ Reporting a bug may help you by bringing a solution to your problem,
+or it may not. But in any case the principal function of a bug report
+is to help the entire community by making the next version of `ld' work
+better. Bug reports are your contribution to the maintenance of `ld'.
+
+ In order for a bug report to serve its purpose, you must include the
+information that enables us to fix the bug.
+
+* Menu:
+
+* Bug Criteria:: Have you found a bug?
+* Bug Reporting:: How to report bugs
+
+
+File: ld.info, Node: Bug Criteria, Next: Bug Reporting, Up: Reporting Bugs
+
+6.1 Have You Found a Bug?
+=========================
+
+If you are not sure whether you have found a bug, here are some
+guidelines:
+
+ * If the linker gets a fatal signal, for any input whatever, that is
+ a `ld' bug. Reliable linkers never crash.
+
+ * If `ld' produces an error message for valid input, that is a bug.
+
+ * If `ld' does not produce an error message for invalid input, that
+ may be a bug. In the general case, the linker can not verify that
+ object files are correct.
+
+ * If you are an experienced user of linkers, your suggestions for
+ improvement of `ld' are welcome in any case.
+
+
+File: ld.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Reporting Bugs
+
+6.2 How to Report Bugs
+======================
+
+A number of companies and individuals offer support for GNU products.
+If you obtained `ld' from a support organization, we recommend you
+contact that organization first.
+
+ You can find contact information for many support companies and
+individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
+
+ Otherwise, send bug reports for `ld' to `bug-binutils@gnu.org'.
+
+ The fundamental principle of reporting bugs usefully is this:
+*report all the facts*. If you are not sure whether to state a fact or
+leave it out, state it!
+
+ Often people omit facts because they think they know what causes the
+problem and assume that some details do not matter. Thus, you might
+assume that the name of a symbol you use in an example does not matter.
+Well, probably it does not, but one cannot be sure. Perhaps the bug
+is a stray memory reference which happens to fetch from the location
+where that name is stored in memory; perhaps, if the name were
+different, the contents of that location would fool the linker into
+doing the right thing despite the bug. Play it safe and give a
+specific, complete example. That is the easiest thing for you to do,
+and the most helpful.
+
+ Keep in mind that the purpose of a bug report is to enable us to fix
+the bug if it is new to us. Therefore, always write your bug reports
+on the assumption that the bug has not been reported previously.
+
+ Sometimes people give a few sketchy facts and ask, "Does this ring a
+bell?" This cannot help us fix a bug, so it is basically useless. We
+respond by asking for enough details to enable us to investigate. You
+might as well expedite matters by sending them to begin with.
+
+ To enable us to fix the bug, you should include all these things:
+
+ * The version of `ld'. `ld' announces it if you start it with the
+ `--version' argument.
+
+ Without this, we will not know whether there is any point in
+ looking for the bug in the current version of `ld'.
+
+ * Any patches you may have applied to the `ld' source, including any
+ patches made to the `BFD' library.
+
+ * The type of machine you are using, and the operating system name
+ and version number.
+
+ * What compiler (and its version) was used to compile `ld'--e.g.
+ "`gcc-2.7'".
+
+ * The command arguments you gave the linker to link your example and
+ observe the bug. To guarantee you will not omit something
+ important, list them all. A copy of the Makefile (or the output
+ from make) is sufficient.
+
+ If we were to try to guess the arguments, we would probably guess
+ wrong and then we might not encounter the bug.
+
+ * A complete input file, or set of input files, that will reproduce
+ the bug. It is generally most helpful to send the actual object
+ files provided that they are reasonably small. Say no more than
+ 10K. For bigger files you can either make them available by FTP
+ or HTTP or else state that you are willing to send the object
+ file(s) to whomever requests them. (Note - your email will be
+ going to a mailing list, so we do not want to clog it up with
+ large attachments). But small attachments are best.
+
+ If the source files were assembled using `gas' or compiled using
+ `gcc', then it may be OK to send the source files rather than the
+ object files. In this case, be sure to say exactly what version of
+ `gas' or `gcc' was used to produce the object files. Also say how
+ `gas' or `gcc' were configured.
+
+ * A description of what behavior you observe that you believe is
+ incorrect. For example, "It gets a fatal signal."
+
+ Of course, if the bug is that `ld' gets a fatal signal, then we
+ will certainly notice it. But if the bug is incorrect output, we
+ might not notice unless it is glaringly wrong. You might as well
+ not give us a chance to make a mistake.
+
+ Even if the problem you experience is a fatal signal, you should
+ still say so explicitly. Suppose something strange is going on,
+ such as, your copy of `ld' is out of synch, or you have
+ encountered a bug in the C library on your system. (This has
+ happened!) Your copy might crash and ours would not. If you told
+ us to expect a crash, then when ours fails to crash, we would know
+ that the bug was not happening for us. If you had not told us to
+ expect a crash, then we would not be able to draw any conclusion
+ from our observations.
+
+ * If you wish to suggest changes to the `ld' source, send us context
+ diffs, as generated by `diff' with the `-u', `-c', or `-p' option.
+ Always send diffs from the old file to the new file. If you even
+ discuss something in the `ld' source, refer to it by context, not
+ by line number.
+
+ The line numbers in our development sources will not match those
+ in your sources. Your line numbers would convey no useful
+ information to us.
+
+ Here are some things that are not necessary:
+
+ * A description of the envelope of the bug.
+
+ Often people who encounter a bug spend a lot of time investigating
+ which changes to the input file will make the bug go away and which
+ changes will not affect it.
+
+ This is often time consuming and not very useful, because the way
+ we will find the bug is by running a single example under the
+ debugger with breakpoints, not by pure deduction from a series of
+ examples. We recommend that you save your time for something else.
+
+ Of course, if you can find a simpler example to report _instead_
+ of the original one, that is a convenience for us. Errors in the
+ output will be easier to spot, running under the debugger will take
+ less time, and so on.
+
+ However, simplification is not vital; if you do not want to do
+ this, report the bug anyway and send us the entire test case you
+ used.
+
+ * A patch for the bug.
+
+ A patch for the bug does help us if it is a good one. But do not
+ omit the necessary information, such as the test case, on the
+ assumption that a patch is all we need. We might see problems
+ with your patch and decide to fix the problem another way, or we
+ might not understand it at all.
+
+ Sometimes with a program as complicated as `ld' it is very hard to
+ construct an example that will make the program follow a certain
+ path through the code. If you do not send us the example, we will
+ not be able to construct one, so we will not be able to verify
+ that the bug is fixed.
+
+ And if we cannot understand what bug you are trying to fix, or why
+ your patch should be an improvement, we will not install it. A
+ test case will help us to understand.
+
+ * A guess about what the bug is or what it depends on.
+
+ Such guesses are usually wrong. Even we cannot guess right about
+ such things without first using the debugger to find the facts.
+
+
+File: ld.info, Node: MRI, Next: GNU Free Documentation License, Prev: Reporting Bugs, Up: Top
+
+Appendix A MRI Compatible Script Files
+**************************************
+
+To aid users making the transition to GNU `ld' from the MRI linker,
+`ld' can use MRI compatible linker scripts as an alternative to the
+more general-purpose linker scripting language described in *Note
+Scripts::. MRI compatible linker scripts have a much simpler command
+set than the scripting language otherwise used with `ld'. GNU `ld'
+supports the most commonly used MRI linker commands; these commands are
+described here.
+
+ In general, MRI scripts aren't of much use with the `a.out' object
+file format, since it only has three sections and MRI scripts lack some
+features to make use of them.
+
+ You can specify a file containing an MRI-compatible script using the
+`-c' command-line option.
+
+ Each command in an MRI-compatible script occupies its own line; each
+command line starts with the keyword that identifies the command (though
+blank lines are also allowed for punctuation). If a line of an
+MRI-compatible script begins with an unrecognized keyword, `ld' issues
+a warning message, but continues processing the script.
+
+ Lines beginning with `*' are comments.
+
+ You can write these commands using all upper-case letters, or all
+lower case; for example, `chip' is the same as `CHIP'. The following
+list shows only the upper-case form of each command.
+
+`ABSOLUTE SECNAME'
+`ABSOLUTE SECNAME, SECNAME, ... SECNAME'
+ Normally, `ld' includes in the output file all sections from all
+ the input files. However, in an MRI-compatible script, you can
+ use the `ABSOLUTE' command to restrict the sections that will be
+ present in your output program. If the `ABSOLUTE' command is used
+ at all in a script, then only the sections named explicitly in
+ `ABSOLUTE' commands will appear in the linker output. You can
+ still use other input sections (whatever you select on the command
+ line, or using `LOAD') to resolve addresses in the output file.
+
+`ALIAS OUT-SECNAME, IN-SECNAME'
+ Use this command to place the data from input section IN-SECNAME
+ in a section called OUT-SECNAME in the linker output file.
+
+ IN-SECNAME may be an integer.
+
+`ALIGN SECNAME = EXPRESSION'
+ Align the section called SECNAME to EXPRESSION. The EXPRESSION
+ should be a power of two.
+
+`BASE EXPRESSION'
+ Use the value of EXPRESSION as the lowest address (other than
+ absolute addresses) in the output file.
+
+`CHIP EXPRESSION'
+`CHIP EXPRESSION, EXPRESSION'
+ This command does nothing; it is accepted only for compatibility.
+
+`END'
+ This command does nothing whatever; it's only accepted for
+ compatibility.
+
+`FORMAT OUTPUT-FORMAT'
+ Similar to the `OUTPUT_FORMAT' command in the more general linker
+ language, but restricted to one of these output formats:
+
+ 1. S-records, if OUTPUT-FORMAT is `S'
+
+ 2. IEEE, if OUTPUT-FORMAT is `IEEE'
+
+ 3. COFF (the `coff-m68k' variant in BFD), if OUTPUT-FORMAT is
+ `COFF'
+
+`LIST ANYTHING...'
+ Print (to the standard output file) a link map, as produced by the
+ `ld' command-line option `-M'.
+
+ The keyword `LIST' may be followed by anything on the same line,
+ with no change in its effect.
+
+`LOAD FILENAME'
+`LOAD FILENAME, FILENAME, ... FILENAME'
+ Include one or more object file FILENAME in the link; this has the
+ same effect as specifying FILENAME directly on the `ld' command
+ line.
+
+`NAME OUTPUT-NAME'
+ OUTPUT-NAME is the name for the program produced by `ld'; the
+ MRI-compatible command `NAME' is equivalent to the command-line
+ option `-o' or the general script language command `OUTPUT'.
+
+`ORDER SECNAME, SECNAME, ... SECNAME'
+`ORDER SECNAME SECNAME SECNAME'
+ Normally, `ld' orders the sections in its output file in the order
+ in which they first appear in the input files. In an
+ MRI-compatible script, you can override this ordering with the
+ `ORDER' command. The sections you list with `ORDER' will appear
+ first in your output file, in the order specified.
+
+`PUBLIC NAME=EXPRESSION'
+`PUBLIC NAME,EXPRESSION'
+`PUBLIC NAME EXPRESSION'
+ Supply a value (EXPRESSION) for external symbol NAME used in the
+ linker input files.
+
+`SECT SECNAME, EXPRESSION'
+`SECT SECNAME=EXPRESSION'
+`SECT SECNAME EXPRESSION'
+ You can use any of these three forms of the `SECT' command to
+ specify the start address (EXPRESSION) for section SECNAME. If
+ you have more than one `SECT' statement for the same SECNAME, only
+ the _first_ sets the start address.
+
+
+File: ld.info, Node: GNU Free Documentation License, Next: Index, Prev: MRI, Up: Top
+
+Appendix B GNU Free Documentation License
+*****************************************
+
+ Version 1.1, March 2000
+
+ Copyright (C) 2000, 2003 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ written document "free" in the sense of freedom: to assure everyone
+ the effective freedom to copy and redistribute it, with or without
+ modifying it, either commercially or noncommercially. Secondarily,
+ this License preserves for the author and publisher a way to get
+ credit for their work, while not being considered responsible for
+ modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work that contains a
+ notice placed by the copyright holder saying it can be distributed
+ under the terms of this License. The "Document", below, refers to
+ any such manual or work. Any member of the public is a licensee,
+ and is addressed as "you."
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter
+ section of the Document that deals exclusively with the
+ relationship of the publishers or authors of the Document to the
+ Document's overall subject (or to related matters) and contains
+ nothing that could fall directly within that overall subject.
+ (For example, if the Document is in part a textbook of
+ mathematics, a Secondary Section may not explain any mathematics.)
+ The relationship could be a matter of historical connection with
+ the subject or with related matters, or of legal, commercial,
+ philosophical, ethical or political position regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, whose contents can be viewed and edited directly
+ and straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup has been designed
+ to thwart or discourage subsequent modification by readers is not
+ Transparent. A copy that is not "Transparent" is called "Opaque."
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML designed for human modification.
+ Opaque formats include PostScript, PDF, proprietary formats that
+ can be read and edited only by proprietary word processors, SGML
+ or XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies of the Document numbering more than
+ 100, and the Document's license notice requires Cover Texts, you
+ must enclose the copies in covers that carry, clearly and legibly,
+ all these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a publicly-accessible
+ computer-network location containing a complete Transparent copy
+ of the Document, free of added material, which the general
+ network-using public has access to download anonymously at no
+ charge using public-standard network protocols. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that version
+ gives permission.
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in the
+ Modified Version, together with at least five of the principal
+ authors of the Document (all of its principal authors, if it
+ has less than five).
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified Version
+ under the terms of this License, in the form shown in the
+ Addendum below.
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section entitled "History", and its title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page.
+ If there is no section entitled "History" in the Document,
+ create one stating the title, year, authors, and publisher of
+ the Document as given on its Title Page, then add an item
+ describing the Modified Version as stated in the previous
+ sentence.
+ J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+ K. In any section entitled "Acknowledgements" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+ M. Delete any section entitled "Endorsements." Such a section
+ may not be included in the Modified Version.
+ N. Do not retitle any existing section as "Endorsements" or to
+ conflict in title with any Invariant Section.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties-for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition
+ of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections entitled
+ "History" in the various original documents, forming one section
+ entitled "History"; likewise combine any sections entitled
+ "Acknowledgements", and any sections entitled "Dedications." You
+ must delete all sections entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, does not as a whole count as a
+ Modified Version of the Document, provided no compilation
+ copyright is claimed for the compilation. Such a compilation is
+ called an "aggregate", and this License does not apply to the
+ other self-contained works thus compiled with the Document, on
+ account of their being thus compiled, if they are not themselves
+ derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one
+ quarter of the entire aggregate, the Document's Cover Texts may be
+ placed on covers that surround only the Document within the
+ aggregate. Otherwise they must appear on covers around the whole
+ aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License provided that you also include the
+ original English version of this License. In case of a
+ disagreement between the translation and the original English
+ version of this License, the original English version will prevail.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided for under this License. Any other
+ attempt to copy, modify, sublicense or distribute the Document is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses
+ terminated so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ http://www.gnu.org/copyleft/.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License."
+
+ If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant. If you have no Front-Cover
+Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being
+LIST"; likewise for Back-Cover Texts.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: ld.info, Node: Index, Prev: GNU Free Documentation License, Up: Top
+
+Index
+*****
+
+
+* Menu:
+
+* ": Symbols. (line 6)
+* -(: Options. (line 609)
+* --accept-unknown-input-arch: Options. (line 627)
+* --add-needed: Options. (line 649)
+* --add-stdcall-alias: Options. (line 1343)
+* --allow-multiple-definition: Options. (line 819)
+* --allow-shlib-undefined: Options. (line 825)
+* --architecture=ARCH: Options. (line 104)
+* --as-needed: Options. (line 637)
+* --auxiliary: Options. (line 205)
+* --base-file: Options. (line 1348)
+* --be8: ARM. (line 23)
+* --bss-plt: PowerPC ELF32. (line 13)
+* --check-sections: Options. (line 701)
+* --cref: Options. (line 711)
+* --default-imported-symver: Options. (line 853)
+* --default-symver: Options. (line 849)
+* --defsym SYMBOL=EXP: Options. (line 739)
+* --demangle[=STYLE]: Options. (line 752)
+* --disable-auto-image-base: Options. (line 1495)
+* --disable-auto-import: Options. (line 1624)
+* --disable-new-dtags: Options. (line 1295)
+* --disable-runtime-pseudo-reloc: Options. (line 1637)
+* --disable-stdcall-fixup: Options. (line 1358)
+* --discard-all: Options. (line 513)
+* --discard-locals: Options. (line 517)
+* --dll: Options. (line 1353)
+* --dll-search-prefix: Options. (line 1501)
+* --dotsyms: PowerPC64 ELF64. (line 33)
+* --dynamic-linker FILE: Options. (line 765)
+* --eh-frame-hdr: Options. (line 1291)
+* --emit-relocs: Options. (line 415)
+* --emit-stub-syms <1>: PowerPC64 ELF64. (line 29)
+* --emit-stub-syms: PowerPC ELF32. (line 37)
+* --enable-auto-image-base: Options. (line 1487)
+* --enable-auto-import: Options. (line 1510)
+* --enable-extra-pe-debug: Options. (line 1642)
+* --enable-new-dtags: Options. (line 1295)
+* --enable-runtime-pseudo-reloc: Options. (line 1629)
+* --enable-stdcall-fixup: Options. (line 1358)
+* --entry=ENTRY: Options. (line 158)
+* --error-unresolved-symbols: Options. (line 1244)
+* --exclude-libs: Options. (line 168)
+* --exclude-symbols: Options. (line 1400)
+* --export-all-symbols: Options. (line 1376)
+* --export-dynamic: Options. (line 179)
+* --fatal-warnings: Options. (line 771)
+* --file-alignment: Options. (line 1406)
+* --filter: Options. (line 226)
+* --fix-v4bx: ARM. (line 44)
+* --force-dynamic: Options. (line 424)
+* --force-exe-suffix: Options. (line 774)
+* --format=FORMAT: Options. (line 115)
+* --format=VERSION: TI COFF. (line 6)
+* --gc-sections: Options. (line 784)
+* --gpsize: Options. (line 259)
+* --hash-size=NUMBER: Options. (line 1304)
+* --heap: Options. (line 1412)
+* --help: Options. (line 792)
+* --image-base: Options. (line 1419)
+* --just-symbols=FILE: Options. (line 447)
+* --kill-at: Options. (line 1428)
+* --large-address-aware: Options. (line 1433)
+* --library-path=DIR: Options. (line 315)
+* --library=ARCHIVE: Options. (line 285)
+* --major-image-version: Options. (line 1442)
+* --major-os-version: Options. (line 1447)
+* --major-subsystem-version: Options. (line 1451)
+* --minor-image-version: Options. (line 1456)
+* --minor-os-version: Options. (line 1461)
+* --minor-subsystem-version: Options. (line 1465)
+* --mri-script=MRI-CMDFILE: Options. (line 139)
+* --multi-subspace: HPPA ELF32. (line 6)
+* --nmagic: Options. (line 384)
+* --no-accept-unknown-input-arch: Options. (line 627)
+* --no-add-needed: Options. (line 649)
+* --no-allow-shlib-undefined: Options. (line 825)
+* --no-as-needed: Options. (line 637)
+* --no-check-sections: Options. (line 701)
+* --no-define-common: Options. (line 723)
+* --no-demangle: Options. (line 752)
+* --no-dotsyms: PowerPC64 ELF64. (line 33)
+* --no-gc-sections: Options. (line 784)
+* --no-keep-memory: Options. (line 804)
+* --no-multi-toc: PowerPC64 ELF64. (line 74)
+* --no-omagic: Options. (line 398)
+* --no-opd-optimize: PowerPC64 ELF64. (line 48)
+* --no-relax: Xtensa. (line 56)
+* --no-tls-optimize <1>: PowerPC64 ELF64. (line 43)
+* --no-tls-optimize: PowerPC ELF32. (line 41)
+* --no-toc-optimize: PowerPC64 ELF64. (line 60)
+* --no-undefined: Options. (line 811)
+* --no-undefined-version: Options. (line 844)
+* --no-warn-mismatch: Options. (line 857)
+* --no-whole-archive: Options. (line 866)
+* --noinhibit-exec: Options. (line 870)
+* --non-overlapping-opd: PowerPC64 ELF64. (line 54)
+* --oformat: Options. (line 882)
+* --omagic: Options. (line 389)
+* --out-implib: Options. (line 1478)
+* --output-def: Options. (line 1470)
+* --output=OUTPUT: Options. (line 404)
+* --pic-executable: Options. (line 895)
+* --print-map: Options. (line 347)
+* --reduce-memory-overheads: Options. (line 1312)
+* --relax: Options. (line 911)
+* --relax on i960: i960. (line 31)
+* --relax on PowerPC: PowerPC ELF32. (line 6)
+* --relax on Xtensa: Xtensa. (line 27)
+* --relocatable: Options. (line 428)
+* --script=SCRIPT: Options. (line 471)
+* --sdata-got: PowerPC ELF32. (line 23)
+* --section-alignment: Options. (line 1647)
+* --section-start SECTIONNAME=ORG: Options. (line 1081)
+* --sort-common: Options. (line 1028)
+* --sort-section alignment: Options. (line 1038)
+* --sort-section name: Options. (line 1034)
+* --split-by-file: Options. (line 1042)
+* --split-by-reloc: Options. (line 1047)
+* --stack: Options. (line 1653)
+* --stats: Options. (line 1060)
+* --strip-all: Options. (line 458)
+* --strip-debug: Options. (line 462)
+* --stub-group-size: PowerPC64 ELF64. (line 6)
+* --stub-group-size=N: HPPA ELF32. (line 12)
+* --subsystem: Options. (line 1660)
+* --support-old-code: ARM. (line 6)
+* --sysroot: Options. (line 1064)
+* --target-help: Options. (line 796)
+* --target1-abs: ARM. (line 27)
+* --target1-rel: ARM. (line 27)
+* --target2=TYPE: ARM. (line 32)
+* --thumb-entry=ENTRY: ARM. (line 17)
+* --trace: Options. (line 467)
+* --trace-symbol=SYMBOL: Options. (line 522)
+* --traditional-format: Options. (line 1069)
+* --undefined=SYMBOL: Options. (line 480)
+* --unique[=SECTION]: Options. (line 498)
+* --unresolved-symbols: Options. (line 1096)
+* --use-blx: ARM. (line 57)
+* --verbose: Options. (line 1125)
+* --version: Options. (line 507)
+* --version-script=VERSION-SCRIPTFILE: Options. (line 1131)
+* --warn-common: Options. (line 1138)
+* --warn-constructors: Options. (line 1206)
+* --warn-multiple-gp: Options. (line 1211)
+* --warn-once: Options. (line 1225)
+* --warn-section-align: Options. (line 1229)
+* --warn-shared-textrel: Options. (line 1236)
+* --warn-unresolved-symbols: Options. (line 1239)
+* --whole-archive: Options. (line 1248)
+* --wrap: Options. (line 1262)
+* -AARCH: Options. (line 103)
+* -aKEYWORD: Options. (line 96)
+* -assert KEYWORD: Options. (line 659)
+* -b FORMAT: Options. (line 115)
+* -Bdynamic: Options. (line 662)
+* -Bgroup: Options. (line 672)
+* -Bshareable: Options. (line 1020)
+* -Bstatic: Options. (line 679)
+* -Bsymbolic: Options. (line 694)
+* -c MRI-CMDFILE: Options. (line 139)
+* -call_shared: Options. (line 662)
+* -d: Options. (line 149)
+* -dc: Options. (line 149)
+* -dn: Options. (line 679)
+* -dp: Options. (line 149)
+* -dy: Options. (line 662)
+* -E: Options. (line 179)
+* -e ENTRY: Options. (line 158)
+* -EB: Options. (line 198)
+* -EL: Options. (line 201)
+* -F: Options. (line 226)
+* -f: Options. (line 205)
+* -fini: Options. (line 250)
+* -G: Options. (line 259)
+* -g: Options. (line 256)
+* -hNAME: Options. (line 267)
+* -i: Options. (line 276)
+* -IFILE: Options. (line 765)
+* -init: Options. (line 279)
+* -lARCHIVE: Options. (line 285)
+* -LDIR: Options. (line 315)
+* -M: Options. (line 347)
+* -m EMULATION: Options. (line 337)
+* -Map: Options. (line 800)
+* -N: Options. (line 389)
+* -n: Options. (line 384)
+* -non_shared: Options. (line 679)
+* -nostdlib: Options. (line 876)
+* -O LEVEL: Options. (line 410)
+* -o OUTPUT: Options. (line 404)
+* -pie: Options. (line 895)
+* -q: Options. (line 415)
+* -qmagic: Options. (line 905)
+* -Qy: Options. (line 908)
+* -r: Options. (line 428)
+* -R FILE: Options. (line 447)
+* -rpath: Options. (line 945)
+* -rpath-link: Options. (line 967)
+* -S: Options. (line 462)
+* -s: Options. (line 458)
+* -shared: Options. (line 1020)
+* -soname=NAME: Options. (line 267)
+* -static: Options. (line 679)
+* -t: Options. (line 467)
+* -T SCRIPT: Options. (line 471)
+* -Tbss ORG: Options. (line 1090)
+* -Tdata ORG: Options. (line 1090)
+* -Ttext ORG: Options. (line 1090)
+* -u SYMBOL: Options. (line 480)
+* -Ur: Options. (line 488)
+* -V: Options. (line 507)
+* -v: Options. (line 507)
+* -X: Options. (line 517)
+* -x: Options. (line 513)
+* -Y PATH: Options. (line 531)
+* -y SYMBOL: Options. (line 522)
+* -z defs: Options. (line 811)
+* -z KEYWORD: Options. (line 535)
+* -z muldefs: Options. (line 819)
+* .: Location Counter. (line 6)
+* /DISCARD/: Output Section Discarding.
+ (line 18)
+* :PHDR: Output Section Phdr.
+ (line 6)
+* =FILLEXP: Output Section Fill.
+ (line 6)
+* >REGION: Output Section Region.
+ (line 6)
+* [COMMON]: Input Section Common.
+ (line 29)
+* ABSOLUTE (MRI): MRI. (line 33)
+* absolute and relocatable symbols: Expression Section. (line 6)
+* absolute expressions: Expression Section. (line 6)
+* ABSOLUTE(EXP): Builtin Functions. (line 10)
+* ADDR(SECTION): Builtin Functions. (line 17)
+* address, section: Output Section Address.
+ (line 6)
+* ALIAS (MRI): MRI. (line 44)
+* ALIGN (MRI): MRI. (line 50)
+* align expression: Builtin Functions. (line 36)
+* align location counter: Builtin Functions. (line 36)
+* ALIGN(ALIGN): Builtin Functions. (line 36)
+* ALIGN(EXP,ALIGN): Builtin Functions. (line 36)
+* ALIGN(SECTION_ALIGN): Forced Output Alignment.
+ (line 6)
+* allocating memory: MEMORY. (line 6)
+* architecture: Miscellaneous Commands.
+ (line 46)
+* architectures: Options. (line 103)
+* archive files, from cmd line: Options. (line 285)
+* archive search path in linker script: File Commands. (line 71)
+* arithmetic: Expressions. (line 6)
+* arithmetic operators: Operators. (line 6)
+* ARM interworking support: ARM. (line 6)
+* AS_NEEDED(FILES): File Commands. (line 51)
+* ASSERT: Miscellaneous Commands.
+ (line 9)
+* assertion in linker script: Miscellaneous Commands.
+ (line 9)
+* assignment in scripts: Assignments. (line 6)
+* AT(LMA): Output Section LMA. (line 6)
+* AT>LMA_REGION: Output Section LMA. (line 6)
+* automatic data imports: WIN32. (line 170)
+* back end: BFD. (line 6)
+* BASE (MRI): MRI. (line 54)
+* BE8: ARM. (line 23)
+* BFD canonical format: Canonical format. (line 11)
+* BFD requirements: BFD. (line 16)
+* big-endian objects: Options. (line 198)
+* binary input format: Options. (line 115)
+* BLOCK(EXP): Builtin Functions. (line 62)
+* bug criteria: Bug Criteria. (line 6)
+* bug reports: Bug Reporting. (line 6)
+* bugs in ld: Reporting Bugs. (line 6)
+* BYTE(EXPRESSION): Output Section Data.
+ (line 6)
+* C++ constructors, arranging in link: Output Section Keywords.
+ (line 19)
+* CHIP (MRI): MRI. (line 58)
+* COLLECT_NO_DEMANGLE: Environment. (line 29)
+* combining symbols, warnings on: Options. (line 1138)
+* command files: Scripts. (line 6)
+* command line: Options. (line 6)
+* common allocation: Options. (line 149)
+* common allocation in linker script: Miscellaneous Commands.
+ (line 20)
+* common symbol placement: Input Section Common.
+ (line 6)
+* compatibility, MRI: Options. (line 139)
+* constants in linker scripts: Constants. (line 6)
+* CONSTRUCTORS: Output Section Keywords.
+ (line 19)
+* constructors: Options. (line 488)
+* constructors, arranging in link: Output Section Keywords.
+ (line 19)
+* crash of linker: Bug Criteria. (line 9)
+* CREATE_OBJECT_SYMBOLS: Output Section Keywords.
+ (line 9)
+* creating a DEF file: WIN32. (line 137)
+* cross reference table: Options. (line 711)
+* cross references: Miscellaneous Commands.
+ (line 30)
+* current output location: Location Counter. (line 6)
+* data: Output Section Data.
+ (line 6)
+* DATA_SEGMENT_ALIGN(MAXPAGESIZE, COMMONPAGESIZE): Builtin Functions.
+ (line 67)
+* DATA_SEGMENT_END(EXP): Builtin Functions. (line 88)
+* DATA_SEGMENT_RELRO_END(OFFSET, EXP): Builtin Functions. (line 94)
+* dbx: Options. (line 1074)
+* DEF files, creating: Options. (line 1470)
+* default emulation: Environment. (line 21)
+* default input format: Environment. (line 9)
+* DEFINED(SYMBOL): Builtin Functions. (line 105)
+* deleting local symbols: Options. (line 513)
+* demangling, default: Environment. (line 29)
+* demangling, from command line: Options. (line 752)
+* direct linking to a dll: WIN32. (line 218)
+* discarding sections: Output Section Discarding.
+ (line 6)
+* discontinuous memory: MEMORY. (line 6)
+* DLLs, creating: Options. (line 1376)
+* DLLs, linking to: Options. (line 1501)
+* dot: Location Counter. (line 6)
+* dot inside sections: Location Counter. (line 34)
+* dot outside sections: Location Counter. (line 64)
+* dynamic linker, from command line: Options. (line 765)
+* dynamic symbol table: Options. (line 179)
+* ELF program headers: PHDRS. (line 6)
+* emulation: Options. (line 337)
+* emulation, default: Environment. (line 21)
+* END (MRI): MRI. (line 62)
+* endianness: Options. (line 198)
+* entry point: Entry Point. (line 6)
+* entry point, from command line: Options. (line 158)
+* entry point, thumb: ARM. (line 17)
+* ENTRY(SYMBOL): Entry Point. (line 6)
+* error on valid input: Bug Criteria. (line 12)
+* example of linker script: Simple Example. (line 6)
+* exporting DLL symbols: WIN32. (line 19)
+* expression evaluation order: Evaluation. (line 6)
+* expression sections: Expression Section. (line 6)
+* expression, absolute: Builtin Functions. (line 10)
+* expressions: Expressions. (line 6)
+* EXTERN: Miscellaneous Commands.
+ (line 13)
+* fatal signal: Bug Criteria. (line 9)
+* file name wildcard patterns: Input Section Wildcards.
+ (line 6)
+* FILEHDR: PHDRS. (line 61)
+* filename symbols: Output Section Keywords.
+ (line 9)
+* fill pattern, entire section: Output Section Fill.
+ (line 6)
+* FILL(EXPRESSION): Output Section Data.
+ (line 39)
+* finalization function: Options. (line 250)
+* first input file: File Commands. (line 79)
+* first instruction: Entry Point. (line 6)
+* FIX_V4BX: ARM. (line 44)
+* FORCE_COMMON_ALLOCATION: Miscellaneous Commands.
+ (line 20)
+* forcing input section alignment: Forced Input Alignment.
+ (line 6)
+* forcing output section alignment: Forced Output Alignment.
+ (line 6)
+* forcing the creation of dynamic sections: Options. (line 424)
+* FORMAT (MRI): MRI. (line 66)
+* functions in expressions: Builtin Functions. (line 6)
+* garbage collection <1>: Input Section Keep. (line 6)
+* garbage collection: Options. (line 784)
+* generating optimized output: Options. (line 410)
+* GNU linker: Overview. (line 6)
+* GNUTARGET: Environment. (line 9)
+* GROUP(FILES): File Commands. (line 44)
+* grouping input files: File Commands. (line 44)
+* groups of archives: Options. (line 609)
+* H8/300 support: H8/300. (line 6)
+* header size: Builtin Functions. (line 170)
+* heap size: Options. (line 1412)
+* help: Options. (line 792)
+* holes: Location Counter. (line 12)
+* holes, filling: Output Section Data.
+ (line 39)
+* HPPA multiple sub-space stubs: HPPA ELF32. (line 6)
+* HPPA stub grouping: HPPA ELF32. (line 12)
+* i960 support: i960. (line 6)
+* image base: Options. (line 1419)
+* implicit linker scripts: Implicit Linker Scripts.
+ (line 6)
+* import libraries: WIN32. (line 10)
+* INCLUDE FILENAME: File Commands. (line 9)
+* including a linker script: File Commands. (line 9)
+* including an entire archive: Options. (line 1248)
+* incremental link: Options. (line 276)
+* INHIBIT_COMMON_ALLOCATION: Miscellaneous Commands.
+ (line 25)
+* initialization function: Options. (line 279)
+* initialized data in ROM: Output Section LMA. (line 21)
+* input file format in linker script: Format Commands. (line 35)
+* input filename symbols: Output Section Keywords.
+ (line 9)
+* input files in linker scripts: File Commands. (line 16)
+* input files, displaying: Options. (line 467)
+* input format: Options. (line 115)
+* input object files in linker scripts: File Commands. (line 16)
+* input section alignment: Forced Input Alignment.
+ (line 6)
+* input section basics: Input Section Basics.
+ (line 6)
+* input section wildcards: Input Section Wildcards.
+ (line 6)
+* input sections: Input Section. (line 6)
+* INPUT(FILES): File Commands. (line 16)
+* integer notation: Constants. (line 6)
+* integer suffixes: Constants. (line 12)
+* internal object-file format: Canonical format. (line 11)
+* invalid input: Bug Criteria. (line 14)
+* K and M integer suffixes: Constants. (line 12)
+* KEEP: Input Section Keep. (line 6)
+* l =: MEMORY. (line 72)
+* L, deleting symbols beginning: Options. (line 517)
+* lazy evaluation: Evaluation. (line 6)
+* ld bugs, reporting: Bug Reporting. (line 6)
+* LDEMULATION: Environment. (line 21)
+* len =: MEMORY. (line 72)
+* LENGTH =: MEMORY. (line 72)
+* LENGTH(MEMORY): Builtin Functions. (line 122)
+* library search path in linker script: File Commands. (line 71)
+* link map: Options. (line 347)
+* link-time runtime library search path: Options. (line 967)
+* linker crash: Bug Criteria. (line 9)
+* linker script concepts: Basic Script Concepts.
+ (line 6)
+* linker script example: Simple Example. (line 6)
+* linker script file commands: File Commands. (line 6)
+* linker script format: Script Format. (line 6)
+* linker script input object files: File Commands. (line 16)
+* linker script simple commands: Simple Commands. (line 6)
+* linker scripts: Scripts. (line 6)
+* LIST (MRI): MRI. (line 77)
+* little-endian objects: Options. (line 201)
+* LOAD (MRI): MRI. (line 84)
+* load address: Output Section LMA. (line 6)
+* LOADADDR(SECTION): Builtin Functions. (line 125)
+* loading, preventing: Output Section Type.
+ (line 22)
+* local symbols, deleting: Options. (line 517)
+* location counter: Location Counter. (line 6)
+* LONG(EXPRESSION): Output Section Data.
+ (line 6)
+* M and K integer suffixes: Constants. (line 12)
+* machine architecture: Miscellaneous Commands.
+ (line 46)
+* machine dependencies: Machine Dependent. (line 6)
+* mapping input sections to output sections: Input Section. (line 6)
+* MAX: Builtin Functions. (line 130)
+* MEMORY: MEMORY. (line 6)
+* memory region attributes: MEMORY. (line 32)
+* memory regions: MEMORY. (line 6)
+* memory regions and sections: Output Section Region.
+ (line 6)
+* memory usage: Options. (line 804)
+* MIN: Builtin Functions. (line 133)
+* MRI compatibility: MRI. (line 6)
+* MSP430 extra sections: MSP430. (line 11)
+* NAME (MRI): MRI. (line 90)
+* name, section: Output Section Name.
+ (line 6)
+* names: Symbols. (line 6)
+* naming the output file: Options. (line 404)
+* NEXT(EXP): Builtin Functions. (line 137)
+* NMAGIC: Options. (line 384)
+* NOCROSSREFS(SECTIONS): Miscellaneous Commands.
+ (line 30)
+* NOLOAD: Output Section Type.
+ (line 22)
+* not enough room for program headers: Builtin Functions. (line 175)
+* o =: MEMORY. (line 67)
+* objdump -i: BFD. (line 6)
+* object file management: BFD. (line 6)
+* object files: Options. (line 29)
+* object formats available: BFD. (line 6)
+* object size: Options. (line 259)
+* OMAGIC: Options. (line 389)
+* opening object files: BFD outline. (line 6)
+* operators for arithmetic: Operators. (line 6)
+* options: Options. (line 6)
+* ORDER (MRI): MRI. (line 95)
+* org =: MEMORY. (line 67)
+* ORIGIN =: MEMORY. (line 67)
+* ORIGIN(MEMORY): Builtin Functions. (line 143)
+* orphan: Orphan Sections. (line 6)
+* output file after errors: Options. (line 870)
+* output file format in linker script: Format Commands. (line 10)
+* output file name in linker scripot: File Commands. (line 61)
+* output section alignment: Forced Output Alignment.
+ (line 6)
+* output section attributes: Output Section Attributes.
+ (line 6)
+* output section data: Output Section Data.
+ (line 6)
+* OUTPUT(FILENAME): File Commands. (line 61)
+* OUTPUT_ARCH(BFDARCH): Miscellaneous Commands.
+ (line 46)
+* OUTPUT_FORMAT(BFDNAME): Format Commands. (line 10)
+* OVERLAY: Overlay Description.
+ (line 6)
+* overlays: Overlay Description.
+ (line 6)
+* partial link: Options. (line 428)
+* PHDRS: PHDRS. (line 6)
+* position independent executables: Options. (line 897)
+* PowerPC ELF32 options: PowerPC ELF32. (line 13)
+* PowerPC GOT: PowerPC ELF32. (line 23)
+* PowerPC long branches: PowerPC ELF32. (line 6)
+* PowerPC PLT: PowerPC ELF32. (line 13)
+* PowerPC stub symbols: PowerPC ELF32. (line 37)
+* PowerPC TLS optimization: PowerPC ELF32. (line 41)
+* PowerPC64 dot symbols: PowerPC64 ELF64. (line 33)
+* PowerPC64 ELF64 options: PowerPC64 ELF64. (line 6)
+* PowerPC64 multi-TOC: PowerPC64 ELF64. (line 74)
+* PowerPC64 OPD optimization: PowerPC64 ELF64. (line 48)
+* PowerPC64 OPD spacing: PowerPC64 ELF64. (line 54)
+* PowerPC64 stub grouping: PowerPC64 ELF64. (line 6)
+* PowerPC64 stub symbols: PowerPC64 ELF64. (line 29)
+* PowerPC64 TLS optimization: PowerPC64 ELF64. (line 43)
+* PowerPC64 TOC optimization: PowerPC64 ELF64. (line 60)
+* precedence in expressions: Operators. (line 6)
+* prevent unnecessary loading: Output Section Type.
+ (line 22)
+* program headers: PHDRS. (line 6)
+* program headers and sections: Output Section Phdr.
+ (line 6)
+* program headers, not enough room: Builtin Functions. (line 175)
+* program segments: PHDRS. (line 6)
+* PROVIDE: PROVIDE. (line 6)
+* PROVIDE_HIDDEN: PROVIDE_HIDDEN. (line 6)
+* PUBLIC (MRI): MRI. (line 103)
+* QUAD(EXPRESSION): Output Section Data.
+ (line 6)
+* quoted symbol names: Symbols. (line 6)
+* read-only text: Options. (line 384)
+* read/write from cmd line: Options. (line 389)
+* regions of memory: MEMORY. (line 6)
+* relative expressions: Expression Section. (line 6)
+* relaxing addressing modes: Options. (line 911)
+* relaxing on H8/300: H8/300. (line 9)
+* relaxing on i960: i960. (line 31)
+* relaxing on Xtensa: Xtensa. (line 27)
+* relocatable and absolute symbols: Expression Section. (line 6)
+* relocatable output: Options. (line 428)
+* removing sections: Output Section Discarding.
+ (line 6)
+* reporting bugs in ld: Reporting Bugs. (line 6)
+* requirements for BFD: BFD. (line 16)
+* retain relocations in final executable: Options. (line 415)
+* retaining specified symbols: Options. (line 931)
+* ROM initialized data: Output Section LMA. (line 21)
+* round up expression: Builtin Functions. (line 36)
+* round up location counter: Builtin Functions. (line 36)
+* runtime library name: Options. (line 267)
+* runtime library search path: Options. (line 945)
+* runtime pseudo-relocation: WIN32. (line 196)
+* scaled integers: Constants. (line 12)
+* scommon section: Input Section Common.
+ (line 20)
+* script files: Options. (line 471)
+* scripts: Scripts. (line 6)
+* search directory, from cmd line: Options. (line 315)
+* search path in linker script: File Commands. (line 71)
+* SEARCH_DIR(PATH): File Commands. (line 71)
+* SECT (MRI): MRI. (line 109)
+* section address: Output Section Address.
+ (line 6)
+* section address in expression: Builtin Functions. (line 17)
+* section alignment, warnings on: Options. (line 1229)
+* section data: Output Section Data.
+ (line 6)
+* section fill pattern: Output Section Fill.
+ (line 6)
+* section load address: Output Section LMA. (line 6)
+* section load address in expression: Builtin Functions. (line 125)
+* section name: Output Section Name.
+ (line 6)
+* section name wildcard patterns: Input Section Wildcards.
+ (line 6)
+* section size: Builtin Functions. (line 154)
+* section, assigning to memory region: Output Section Region.
+ (line 6)
+* section, assigning to program header: Output Section Phdr.
+ (line 6)
+* SECTIONS: SECTIONS. (line 6)
+* sections, discarding: Output Section Discarding.
+ (line 6)
+* segment origins, cmd line: Options. (line 1090)
+* SEGMENT_START(SEGMENT, DEFAULT): Builtin Functions. (line 146)
+* segments, ELF: PHDRS. (line 6)
+* shared libraries: Options. (line 1022)
+* SHORT(EXPRESSION): Output Section Data.
+ (line 6)
+* SIZEOF(SECTION): Builtin Functions. (line 154)
+* SIZEOF_HEADERS: Builtin Functions. (line 170)
+* small common symbols: Input Section Common.
+ (line 20)
+* SORT: Input Section Wildcards.
+ (line 58)
+* SORT_BY_ALIGNMENT: Input Section Wildcards.
+ (line 54)
+* SORT_BY_NAME: Input Section Wildcards.
+ (line 46)
+* SQUAD(EXPRESSION): Output Section Data.
+ (line 6)
+* stack size: Options. (line 1653)
+* standard Unix system: Options. (line 7)
+* start of execution: Entry Point. (line 6)
+* STARTUP(FILENAME): File Commands. (line 79)
+* strip all symbols: Options. (line 458)
+* strip debugger symbols: Options. (line 462)
+* stripping all but some symbols: Options. (line 931)
+* SUBALIGN(SUBSECTION_ALIGN): Forced Input Alignment.
+ (line 6)
+* suffixes for integers: Constants. (line 12)
+* symbol defaults: Builtin Functions. (line 105)
+* symbol definition, scripts: Assignments. (line 6)
+* symbol names: Symbols. (line 6)
+* symbol tracing: Options. (line 522)
+* symbol versions: VERSION. (line 6)
+* symbol-only input: Options. (line 447)
+* symbols, from command line: Options. (line 739)
+* symbols, relocatable and absolute: Expression Section. (line 6)
+* symbols, retaining selectively: Options. (line 931)
+* synthesizing linker: Options. (line 911)
+* synthesizing on H8/300: H8/300. (line 14)
+* TARGET(BFDNAME): Format Commands. (line 35)
+* TARGET1: ARM. (line 27)
+* TARGET2: ARM. (line 32)
+* thumb entry point: ARM. (line 17)
+* TI COFF versions: TI COFF. (line 6)
+* traditional format: Options. (line 1069)
+* unallocated address, next: Builtin Functions. (line 137)
+* undefined symbol: Options. (line 480)
+* undefined symbol in linker script: Miscellaneous Commands.
+ (line 13)
+* undefined symbols, warnings on: Options. (line 1225)
+* uninitialized data placement: Input Section Common.
+ (line 6)
+* unspecified memory: Output Section Data.
+ (line 39)
+* usage: Options. (line 792)
+* USE_BLX: ARM. (line 57)
+* using a DEF file: WIN32. (line 42)
+* using auto-export functionality: WIN32. (line 22)
+* Using decorations: WIN32. (line 141)
+* variables, defining: Assignments. (line 6)
+* verbose: Options. (line 1125)
+* version: Options. (line 507)
+* version script: VERSION. (line 6)
+* version script, symbol versions: Options. (line 1131)
+* VERSION {script text}: VERSION. (line 6)
+* versions of symbols: VERSION. (line 6)
+* warnings, on combining symbols: Options. (line 1138)
+* warnings, on section alignment: Options. (line 1229)
+* warnings, on undefined symbols: Options. (line 1225)
+* weak externals: WIN32. (line 380)
+* what is this?: Overview. (line 6)
+* wildcard file name patterns: Input Section Wildcards.
+ (line 6)
+* Xtensa options: Xtensa. (line 56)
+* Xtensa processors: Xtensa. (line 6)
+
+
+
+Tag Table:
+Node: Top347
+Node: Overview1109
+Node: Invocation2223
+Node: Options2631
+Node: Environment77286
+Node: Scripts79046
+Node: Basic Script Concepts80780
+Node: Script Format83487
+Node: Simple Example84350
+Node: Simple Commands87446
+Node: Entry Point87897
+Node: File Commands88656
+Node: Format Commands92522
+Node: Miscellaneous Commands94488
+Node: Assignments96718
+Node: Simple Assignments97209
+Node: PROVIDE98945
+Node: PROVIDE_HIDDEN100150
+Node: Source Code Reference100394
+Node: SECTIONS103974
+Node: Output Section Description105865
+Node: Output Section Name106918
+Node: Output Section Address107794
+Node: Input Section109443
+Node: Input Section Basics110244
+Node: Input Section Wildcards112596
+Node: Input Section Common117329
+Node: Input Section Keep118811
+Node: Input Section Example119301
+Node: Output Section Data120269
+Node: Output Section Keywords123046
+Node: Output Section Discarding126615
+Node: Output Section Attributes127571
+Node: Output Section Type128575
+Node: Output Section LMA129729
+Node: Forced Output Alignment132000
+Node: Forced Input Alignment132268
+Node: Output Section Region132653
+Node: Output Section Phdr133083
+Node: Output Section Fill133747
+Node: Overlay Description134889
+Node: MEMORY139137
+Node: PHDRS143337
+Node: VERSION148376
+Node: Expressions156167
+Node: Constants157045
+Node: Symbols157606
+Node: Orphan Sections158344
+Node: Location Counter159107
+Node: Operators163411
+Node: Evaluation164333
+Node: Expression Section165697
+Node: Builtin Functions167186
+Node: Implicit Linker Scripts174678
+Node: Machine Dependent175453
+Node: H8/300176314
+Node: i960177939
+Node: ARM179624
+Node: HPPA ELF32182540
+Node: MMIX184163
+Node: MSP430185380
+Node: PowerPC ELF32186428
+Node: PowerPC64 ELF64188719
+Node: TI COFF193133
+Node: WIN32193665
+Node: Xtensa211739
+Node: BFD214861
+Node: BFD outline216316
+Node: BFD information loss217602
+Node: Canonical format220119
+Node: Reporting Bugs224476
+Node: Bug Criteria225170
+Node: Bug Reporting225869
+Node: MRI232894
+Node: GNU Free Documentation License237537
+Node: Index257251
+
+End Tag Table
diff --git a/binutils-2.17/ld/ld.texinfo b/binutils-2.17/ld/ld.texinfo
new file mode 100644
index 00000000..07bb0c3d
--- /dev/null
+++ b/binutils-2.17/ld/ld.texinfo
@@ -0,0 +1,6654 @@
+\input texinfo
+@setfilename ld.info
+@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+@c 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+@syncodeindex ky cp
+@c man begin INCLUDE
+@include configdoc.texi
+@c (configdoc.texi is generated by the Makefile)
+@include ldver.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 ARC
+@set ARM
+@set D10V
+@set D30V
+@set H8/300
+@set H8/500
+@set HPPA
+@set I370
+@set I80386
+@set I860
+@set I960
+@set M32R
+@set M68HC11
+@set M680X0
+@set MCORE
+@set MIPS
+@set MMIX
+@set MSP430
+@set PDP11
+@set PJ
+@set POWERPC
+@set POWERPC64
+@set SH
+@set SPARC
+@set TIC54X
+@set V850
+@set VAX
+@set WIN32
+@set XTENSA
+@end ifset
+@c man end
+
+@ifinfo
+@format
+START-INFO-DIR-ENTRY
+* Ld: (ld). The GNU linker.
+END-INFO-DIR-ENTRY
+@end format
+@end ifinfo
+
+@ifinfo
+This file documents the @sc{gnu} linker LD version @value{VERSION}.
+
+Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000,
+2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+
+@ignore
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1
+or any later version published by the Free Software Foundation;
+with 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''.
+
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+@end ifinfo
+@iftex
+@finalout
+@setchapternewpage odd
+@settitle Using LD, the GNU linker
+@titlepage
+@title Using ld
+@subtitle The GNU linker
+@sp 1
+@subtitle @code{ld} version 2
+@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 Using LD, 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, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001,
+2002, 2003, 2004 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.1
+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
+@c FIXME: Talk about importance of *order* of args, cmds to linker!
+
+@ifnottex
+@node Top
+@top Using ld
+This file documents the @sc{gnu} linker ld version @value{VERSION}.
+
+This document is distributed under the terms of the GNU Free
+Documentation License. A copy of the license is included in the
+section entitled ``GNU Free Documentation License''.
+
+@menu
+* Overview:: Overview
+* Invocation:: Invocation
+* Scripts:: Linker Scripts
+@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 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 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
+* Index:: 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}, or the manual
+ld: the GNU linker, 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. Note that
+specifying a script in this way merely augments the main linker script;
+use the @samp{-T} option to replace the default linker script entirely.
+@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 preceeded 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,--startgroup foo.o bar.o -Wl,--endgroup
+@end smallexample
+
+This is important, because otherwise the compiler driver program may
+silently drop the linker options, resulting in a bad link.
+
+Here is a table of the generic command line switches accepted by the GNU
+linker:
+
+@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.
+
+@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}.
+
+@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.
+
+@cindex dynamic symbol table
+@kindex -E
+@kindex --export-dynamic
+@item -E
+@itemx --export-dynamic
+When creating a dynamically linked executable, add all symbols to the
+dynamic symbol table. The dynamic symbol table is the set of symbols
+which are visible from dynamic objects at run time.
+
+If you do not use this option, the dynamic symbol table will normally
+contain only those symbols which are referenced by some dynamic object
+mentioned in the link.
+
+If you use @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 version script to control what symbols should
+be added to the dynamic symbol table if the output format supports it.
+See the description of @samp{--version-script} in @ref{VERSION}.
+
+@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
+@kindex --auxiliary
+@item -f
+@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
+@kindex --filter
+@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
+@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
+@kindex --gpsize
+@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
+@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{archive}
+@kindex --library=@var{archive}
+@item -l@var{archive}
+@itemx --library=@var{archive}
+Add archive file @var{archive} to the list of files to link. This
+option may be used any number of times. @command{ld} will search its
+path-list for occurrences of @code{lib@var{archive}.a} for every
+@var{archive} specified.
+
+On systems which support shared libraries, @command{ld} may also search for
+libraries with extensions other than @code{.a}. Specifically, on ELF
+and SunOS systems, @command{ld} will search a directory for a library with
+an extension of @code{.so} before searching for one with an extension of
+@code{.a}. By convention, a @code{.so} extension indicates a shared
+library.
+
+The linker will search an archive only once, at the location where it is
+specified on the command line. If the archive defines a symbol which
+was undefined in some object which appeared before the archive on the
+command line, the linker will include the appropriate file(s) from the
+archive. However, an undefined symbol in an object appearing later on
+the command line will not cause the linker to search the archive again.
+
+See the @option{-(} 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.
+
+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 mark the output as
+@code{NMAGIC} if possible.
+
+@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.
+
+@kindex -q
+@kindex --emit-relocs
+@cindex retain relocations in final executable
+@item -q
+@itemx --emit-relocs
+Leave relocation sections and contents in fully linked exececutables.
+Post link analysis and optimization tools may need this information in
+order to perform correct modifications of executables. This results
+in larger executables.
+
+This option is currently only supported on ELF platforms.
+
+@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 -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
+@cindex L, deleting symbols beginning
+@item -X
+@itemx --discard-locals
+Delete all temporary local symbols. For most targets, this is all local
+symbols whose names begin with @samp{L}.
+
+@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 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.
+
+@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. @option{--as-needed} causes DT_NEEDED tags to only be emitted
+for libraries that satisfy some symbol reference from regular objects
+which is undefined at the point that the library was linked.
+@option{--no-as-needed} restores the default behaviour.
+
+@kindex --add-needed
+@kindex --no-add-needed
+@item --add-needed
+@itemx --no-add-needed
+This option affects the treatment of dynamic libraries from ELF
+DT_NEEDED tags in dynamic libraries mentioned on the command line after
+the @option{--no-add-needed} option. Normally, the linker will add
+a DT_NEEDED tag for each dynamic library from DT_NEEDED tags.
+@option{--no-add-needed} causes DT_NEEDED tags will never be emitted
+for those libraries from DT_NEEDED tags. @option{--add-needed} restores
+the default behaviour.
+
+@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 --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}.
+
+@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 --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
+@item --fatal-warnings
+Treat all warnings as errors.
+
+@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 --no-gc-sections
+@itemx --gc-sections
+Enable garbage collection of unused input sections. It is ignored on
+targets that do not support this option. This option is not compatible
+with @samp{-r}. The default behaviour (of not performing this garbage
+collection) can be restored by specifying @samp{--no-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
+@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 (the default) 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 reason that @option{--allow-shlib-undefined} is the default is that
+the shared library being specified at link time may not be the same as
+the one that is available at load time, so the symbols might actually be
+resolvable at load time. Plus there are some systems, (eg BeOS) where
+undefined symbols in shared libraries is normal. (The kernel patches
+them at load time to select which function is most appropriate
+for the current architecture. This is used for example to dynamically
+select an appropriate memset function). Apparently it is also normal
+for HPPA shared libraries to have undefined symbols.
+
+@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-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
+@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
+@item --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 global
+optimizations that become possible when the linker resolves addressing
+in the program, such as relaxing address modes and synthesizing new
+instructions in the output object file.
+
+On some platforms these link time global optimizations may make symbolic
+debugging of the resulting executable impossible.
+@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
+
+@cindex retaining specified symbols
+@cindex stripping all but some symbols
+@cindex symbols, retaining selectively
+@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
+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
+filesystems.
+
+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
+@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. It is for the native linker only.
+@item
+On an ELF system, if the @option{-rpath} and @code{rpath-link} options
+were not used, search the contents of the environment variable
+@code{LD_RUN_PATH}. It is for the native linker only.
+@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 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.
+
+@item --sort-common
+@kindex --sort-common
+This option tells @command{ld} to sort the common symbols by size when it
+places them in the appropriate output sections. First come all the one
+byte symbols, then all the two byte, then all the four byte, and then
+everything else. This is to prevent gaps between symbols due to
+alignment constraints.
+
+@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
+@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 --section-start, with @code{.bss}, @code{.data} or
+@code{.text} as the @var{sectionname}.
+
+@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
+@itemx --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 meaningful on ELF platforms which support shared libraries.
+@xref{VERSION}.
+
+@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-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
+@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 --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.
+
+@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-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]
+
+@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 --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 amount of memory to reserve (and optionally commit) to be
+used as heap for this program. The default is 1Mb reserved, 4K
+committed.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@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 ``Charateristics'' field of the COFF
+header is set to indicate that this executable supports virtual addresses
+greater than 2 gigabytes. This should be used in conjuction with the /3GB
+or /USERVA=@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.
+
+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 amount of memory to reserve (and optionally commit) to be
+used as stack for this program. The default is 2Mb reserved, 4K
+committed.
+[This option is specific to the i386 PE targeted port of the linker]
+
+@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]
+
+@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 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
+
+* 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 the symbol @code{start}, if defined;
+@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.
+
+@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 scripot
+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 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 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{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. If you do not provide @var{address},
+the linker will set it based on @var{region} if present, or otherwise
+based on the current value of the location counter.
+
+If you provide @var{address}, the address of the output section will be
+set to precisely that. If you provide neither @var{address} nor
+@var{region}, then the address of the output section will be set to the
+current value of the location counter aligned to the alignment
+requirements of the output section. The alignment requirement of the
+output section is the strictest alignment of any input section contained
+within the output section.
+
+For example,
+@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 a @samp{.text} input
+section.
+
+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.
+
+@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
+
+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 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 section which do not have any
+contents. This is for convenience when referring to input sections that
+may or may not be present in any of the input files. For example:
+@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.
+
+If you use anything other than an input section description as an output
+section command, such as a symbol assignment, then the output section
+will always be created, even if there are no matching input sections.
+
+@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{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 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. The contents of the
+@samp{ROM} section will appear in the linker output file as usual.
+@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 address expression which may appear in
+an output section description sets the VMA (@pxref{Output Section
+Address}).
+
+The linker will normally set the LMA equal to the VMA. You can change
+that by using the @code{AT} keyword. The expression @var{lma} that
+follows the @code{AT} keyword specifies the load address of the
+section.
+
+Alternatively, with @samp{AT>@var{lma_region}} expression, you may
+specify a memory region for the section's load address. @xref{MEMORY}.
+Note that if the section has not had a VMA assigned to it then the
+linker will use the @var{lma_region} as the VMA region as well.
+@xref{Output Section Region}.
+
+@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 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
+defines 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: @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) @}
+ __load_start_text0 = LOADADDR (.text0);
+ __load_stop_text0 = LOADADDR (.text0) + SIZEOF (.text0);
+ .text1 0x1000 : AT (0x4000 + SIZEOF (.text0)) @{ o2/*.o(.text) @}
+ __load_start_text1 = LOADADDR (.text1);
+ __load_stop_text1 = LOADADDR (.text1) + SIZEOF (.text1);
+ . = 0x1000 + MAX (SIZEOF (.text0), SIZEOF (.text1));
+@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.
+
+@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 preceding attributes
+@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.
+
+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 appear 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.
+
+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::*;
+ "int 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.
+
+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 omited, provided it is the only version node
+in the version script. Such version script doesn't assign any versions to
+symbols, only selects which symbols will be globally visible out and which
+won't.
+
+@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}.
+
+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
+* 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. The linker considers other integers 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;
+@end smallexample
+
+@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.
+
+@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 never be moved backwards.
+
+@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
+When the linker evaluates an expression, the result is either absolute
+or relative to some section. A relative expression is expressed as a
+fixed offset from the base of a section.
+
+The position of the expression within the linker script determines
+whether it is absolute or relative. An expression which appears within
+an output section definition is relative to the base of the output
+section. An expression which appears elsewhere will be absolute.
+
+A symbol set to a relative expression will be relocatable if you request
+relocatable output using the @samp{-r} option. That means that a
+further link operation may change the value of the symbol. The symbol's
+section will be the section of the relative expression.
+
+A symbol set to an absolute expression will retain the same value
+through any further link operation. The symbol will be absolute, and
+will not have any particular associated section.
+
+You can use the builtin function @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.
+
+@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 absolute address (the VMA) of the named @var{section}. Your
+script must previously have defined the location of that section. In
+the following example, @code{symbol_1} and @code{symbol_2} are assigned
+identical values:
+@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 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}. This is normally
+the same as @code{ADDR}, but it may be different if the @code{AT}
+attribute is used in the output section definition (@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 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 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 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} instrcutions which use the
+32 bit absolute address form, but refer to the top page of memory, and
+changes them to use 16 bit address form.
+(That is: the linker turns @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).
+
+@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
+betweem 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 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 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.
+
+@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 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.
+
+Symbols with the prefix @code{__.MMIX.start.}, for example
+@code{__.MMIX.start..text} and @code{__.MMIX.start..data} are special;
+there must be only one each, even if they are local. The default linker
+script uses these to set the default start address of a section.
+
+Initial and trailing multiples of zero-valued 32-bit words in a section,
+are left out from an mmo file.
+
+@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.
+
+@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.
+
+@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 scrip @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 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 decription 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
+@end itemize
+
+If, however, @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
+@end example
+
+This example defines a DLL with a non-default base address and five
+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 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 shoud 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] ) *
+@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 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
+imformation.
+@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 archieve 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, expecially 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
+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 two 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.
+
+So, import libs are not going away. But the ability to replace
+true import libs with a simple symbolic link to (or a copy of)
+a dll, in most cases, is a useful addition to the suite of tools
+binutils makes available to the win32 developer. Given the
+massive improvements in memory requirements during linking, storage
+requirements, and linking speed, we expect that many developers
+will soon begin to use this feature whenever possible.
+
+@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.
+@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
+@kindex --no-relax
+@item --no-relax
+Since the Xtensa version of @code{ld} enables the @option{--relax} option
+by default, the @option{--no-relax} option is provided to disable
+relaxation.
+
+@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.
+
+Otherwise, send bug reports for @command{ld} to
+@samp{bug-binutils@@gnu.org}.
+
+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 synch, or you have encountered a bug in the
+C library on your system. (This has happened!) Your copy might crash
+and ours would not. If you told us to expect a crash, then when ours
+fails to crash, we would know that the bug was not happening for us. If
+you had not told us to expect a crash, then we would not be able to draw
+any conclusion from our observations.
+
+@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
+
+@include fdl.texi
+
+@node Index
+@unnumbered 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
+
+
+@contents
+@bye
diff --git a/binutils-2.17/ld/ldcref.c b/binutils-2.17/ld/ldcref.c
new file mode 100644
index 00000000..7445aa8c
--- /dev/null
+++ b/binutils-2.17/ld/ldcref.c
@@ -0,0 +1,598 @@
+/* ldcref.c -- output a cross reference table
+ Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006
+ Free Software Foundation, Inc.
+ Written by Ian Lance Taylor <ian@cygnus.com>
+
+This file is part of GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* This file 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 "bfd.h"
+#include "sysdep.h"
+#include "bfdlink.h"
+#include "libiberty.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. */
+ 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;
+
+/* 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 = xmalloc (sizeof *r);
+ 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;
+}
+
+/* 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 = data;
+
+ ASSERT (h->demangled == NULL);
+ h->demangled = demangle (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 = a1;
+ const struct cref_hash_entry * const *p2 = 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 = 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;
+ lang_input_statement_type *li;
+ asymbol **asymbols, **syms;
+
+ abfd = statement->the_bfd;
+ if (abfd == NULL)
+ return;
+
+ li = abfd->usrdata;
+ if (li != NULL && li->asymbols != NULL)
+ asymbols = li->asymbols;
+ else
+ {
+ long symsize;
+ long symbol_count;
+
+ symsize = bfd_get_symtab_upper_bound (abfd);
+ if (symsize < 0)
+ einfo (_("%B%F: could not read symbols; %E\n"), abfd);
+ asymbols = xmalloc (symsize);
+ symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
+ if (symbol_count < 0)
+ einfo (_("%B%F: could not read symbols: %E\n"), abfd);
+ if (li != NULL)
+ {
+ li->asymbols = asymbols;
+ li->symbol_count = symbol_count;
+ }
+ }
+
+ for (syms = asymbols; *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);
+ }
+ }
+
+ if (li == NULL)
+ free (asymbols);
+}
+
+/* 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)
+{
+ lang_input_statement_type *li;
+ asymbol **asymbols;
+ 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. */
+
+ li = abfd->usrdata;
+ if (li != NULL && li->asymbols != NULL)
+ asymbols = li->asymbols;
+ else
+ {
+ long symsize;
+ long symbol_count;
+
+ symsize = bfd_get_symtab_upper_bound (abfd);
+ if (symsize < 0)
+ einfo (_("%B%F: could not read symbols; %E\n"), abfd);
+ asymbols = xmalloc (symsize);
+ symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
+ if (symbol_count < 0)
+ einfo (_("%B%F: could not read symbols: %E\n"), abfd);
+ if (li != NULL)
+ {
+ li->asymbols = asymbols;
+ li->symbol_count = symbol_count;
+ }
+ }
+
+ info.sym_name = name;
+ info.global = global;
+ info.defsec = sec;
+ info.ncrs = ncrs;
+ info.asymbols = asymbols;
+ bfd_map_over_sections (abfd, check_reloc_refs, &info);
+
+ if (li == NULL)
+ free (asymbols);
+}
+
+/* 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 = 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 = 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))
+ && (symname != NULL
+ ? strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), symname) == 0
+ : (((*q->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0
+ && bfd_get_section (*q->sym_ptr_ptr) == info->defsec)))
+ {
+ /* 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.17/ld/ldctor.c b/binutils-2.17/ld/ldctor.c
new file mode 100644
index 00000000..3de4ef16
--- /dev/null
+++ b/binutils-2.17/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 Free Software Foundation, Inc.
+ By Steve Chamberlain <sac@cygnus.com>
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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.
+
+GLD 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. */
+
+#include "bfd.h"
+#include "sysdep.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 = 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 = 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 (strncmp (name, "GLOBAL_", sizeof "GLOBAL_" - 1) != 0)
+ 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 = p1;
+ const struct set_element * const *pe2 = 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;
+ lang_statement_list_type *old;
+ 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 = 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);
+ }
+ }
+
+ old = stat_ptr;
+ stat_ptr = &constructor_list;
+
+ lang_list_init (stat_ptr);
+
+ 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 (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 (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));
+ }
+
+ stat_ptr = old;
+}
diff --git a/binutils-2.17/ld/ldctor.h b/binutils-2.17/ld/ldctor.h
new file mode 100644
index 00000000..5608ff7c
--- /dev/null
+++ b/binutils-2.17/ld/ldctor.h
@@ -0,0 +1,60 @@
+/* ldctor.h - linker constructor support
+ Copyright 1991, 1992, 1993, 1994, 1995, 1998, 2000, 2002, 2003
+ Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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.
+
+GLD 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 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.17/ld/ldemul.c b/binutils-2.17/ld/ldemul.c
new file mode 100644
index 00000000..fad1f184
--- /dev/null
+++ b/binutils-2.17/ld/ldemul.c
@@ -0,0 +1,323 @@
+/* ldemul.c -- clearing house for ld emulation states
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2005
+ Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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.
+
+GLD 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. */
+
+#include "config.h"
+#include "bfd.h"
+#include "sysdep.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;
+}
+
+bfd_boolean
+ldemul_place_orphan (asection *s)
+{
+ if (ld_emulation->place_orphan)
+ return (*ld_emulation->place_orphan) (s);
+ return FALSE;
+}
+
+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;
+}
+
+void
+after_parse_default (void)
+{
+}
+
+void
+after_open_default (void)
+{
+}
+
+void
+after_allocation_default (void)
+{
+}
+
+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 (output_bfd, &link_info);
+}
+
+void
+set_output_arch_default (void)
+{
+ /* Set the output architecture and machine if possible. */
+ bfd_set_arch_mach (output_bfd,
+ ldfile_output_architecture, ldfile_output_machine);
+}
+
+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.17/ld/ldemul.h b/binutils-2.17/ld/ldemul.h
new file mode 100644
index 00000000..1b9b79b0
--- /dev/null
+++ b/binutils-2.17/ld/ldemul.h
@@ -0,0 +1,204 @@
+/* ld-emul.h - Linker emulation header file
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
+ 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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 1, or (at your option)
+ any later version.
+
+ GLD 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. */
+
+#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 bfd_boolean ldemul_place_orphan
+ (asection *);
+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. */
+ bfd_boolean (*place_orphan)
+ (asection *);
+
+ /* 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.17/ld/ldexp.c b/binutils-2.17/ld/ldexp.c
new file mode 100644
index 00000000..c9d707e7
--- /dev/null
+++ b/binutils-2.17/ld/ldexp.c
@@ -0,0 +1,1095 @@
+/* This module handles expression trees.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+/* 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 "bfd.h"
+#include "sysdep.h"
+#include "bfdlink.h"
+
+#include "ld.h"
+#include "ldmain.h"
+#include "ldmisc.h"
+#include "ldexp.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" },
+ { SIZEOF, "SIZEOF" },
+ { ADDR, "ADDR" },
+ { LOADADDR, "LOADADDR" },
+ { MAX_K, "MAX_K" },
+ { 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)
+{
+ 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 = stat_alloc (sizeof (new->value));
+ new->type.node_code = INT;
+ new->value.value = value;
+ new->value.str = NULL;
+ new->type.node_class = etree_value;
+ return new;
+}
+
+etree_type *
+exp_bigintop (bfd_vma value, char *str)
+{
+ etree_type *new = stat_alloc (sizeof (new->value));
+ new->type.node_code = INT;
+ new->value.value = value;
+ new->value.str = str;
+ new->type.node_class = etree_value;
+ return new;
+}
+
+/* Build an expression representing an unnamed relocatable value. */
+
+etree_type *
+exp_relop (asection *section, bfd_vma value)
+{
+ etree_type *new = stat_alloc (sizeof (new->rel));
+ new->type.node_code = REL;
+ new->type.node_class = etree_rel;
+ new->rel.section = section;
+ new->rel.value = value;
+ return new;
+}
+
+static void
+new_rel (bfd_vma value, char *str, asection *section)
+{
+ expld.result.valid_p = TRUE;
+ expld.result.value = value;
+ expld.result.str = str;
+ 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 '~':
+ make_abs ();
+ expld.result.value = ~expld.result.value;
+ break;
+
+ case '!':
+ make_abs ();
+ expld.result.value = !expld.result.value;
+ break;
+
+ case '-':
+ make_abs ();
+ 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)
+{
+ 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. */
+ 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)
+ {
+ seg->used = TRUE;
+ expld.result.value = seg->value;
+ expld.result.str = NULL;
+ expld.result.section = NULL;
+ break;
+ }
+ }
+ else if (expld.result.valid_p)
+ {
+ etree_value_type lhs = expld.result;
+
+ exp_fold_tree_1 (tree->binary.rhs);
+ if (expld.result.valid_p)
+ {
+ /* If the values are from different sections, or this is an
+ absolute expression, make both the source arguments
+ absolute. However, adding or subtracting an absolute
+ value from a relative value is meaningful, and is an
+ exception. */
+ if (expld.section != bfd_abs_section_ptr
+ && lhs.section == bfd_abs_section_ptr
+ && tree->type.node_code == '+')
+ {
+ /* Keep the section of the rhs term. */
+ expld.result.value = lhs.value + expld.result.value;
+ return;
+ }
+ else if (expld.section != bfd_abs_section_ptr
+ && expld.result.section == bfd_abs_section_ptr
+ && (tree->type.node_code == '+'
+ || tree->type.node_code == '-'))
+ {
+ /* Keep the section of the lhs term. */
+ expld.result.section = lhs.section;
+ }
+ else if (expld.result.section != lhs.section
+ || expld.section == bfd_abs_section_ptr)
+ {
+ make_abs ();
+ lhs.value += lhs.section->vma;
+ }
+
+ 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;
+
+ BOP ('+', +);
+ BOP ('*', *);
+ BOP ('-', -);
+ BOP (LSHIFT, <<);
+ BOP (RSHIFT, >>);
+ BOP (EQ, ==);
+ BOP (NE, !=);
+ BOP ('<', <);
+ BOP ('>', >);
+ BOP (LE, <=);
+ BOP (GE, >=);
+ BOP ('&', &);
+ BOP ('^', ^);
+ BOP ('|', |);
+ BOP (ANDAND, &&);
+ BOP (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:
+ 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 = align_n (expld.dot, maxpage);
+ 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:
+ 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 ();
+ }
+ }
+ else
+ expld.result.valid_p = FALSE;
+ }
+}
+
+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 (output_bfd, link_info.relocatable);
+ new_abs (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 (output_bfd, &link_info,
+ tree->name.name,
+ FALSE, FALSE, TRUE);
+ expld.result.value = (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));
+ expld.result.section = bfd_abs_section_ptr;
+ expld.result.valid_p = TRUE;
+ }
+ 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 (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)
+ {
+ if (bfd_is_abs_section (h->u.def.section))
+ new_abs (h->u.def.value);
+ else
+ {
+ 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
+ new_rel (h->u.def.value + h->u.def.section->output_offset,
+ NULL, 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 && os->processed)
+ new_rel (0, NULL, 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 && os->processed)
+ {
+ if (os->load_base == NULL)
+ new_rel (0, NULL, os->bfd_section);
+ else
+ exp_fold_tree_1 (os->load_base);
+ }
+ }
+ break;
+
+ case SIZEOF:
+ if (expld.phase != lang_first_phase_enum)
+ {
+ int opb = bfd_octets_per_byte (output_bfd);
+ lang_output_section_statement_type *os;
+
+ os = lang_output_section_find (tree->name.name);
+ if (os == NULL)
+ new_abs (0);
+ else if (os->processed)
+ new_abs (os->bfd_section->size / opb);
+ }
+ break;
+
+ case LENGTH:
+ {
+ lang_memory_region_type *mem;
+
+ mem = lang_memory_region_lookup (tree->name.name, FALSE);
+ if (mem != NULL)
+ new_abs (mem->length);
+ else
+ einfo (_("%F%S: undefined MEMORY region `%s'"
+ " referenced in expression\n"), tree->name.name);
+ }
+ break;
+
+ case ORIGIN:
+ {
+ lang_memory_region_type *mem;
+
+ mem = lang_memory_region_lookup (tree->name.name, FALSE);
+ if (mem != NULL)
+ new_abs (mem->origin);
+ else
+ einfo (_("%F%S: undefined MEMORY region `%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_rel (tree->value.value, tree->value.str, expld.section);
+ 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,
+ NULL, 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 + 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;
+ h->u.def.section = expld.result.section;
+ if (tree->type.node_class == etree_provide)
+ tree->type.node_class = etree_provided;
+ }
+ }
+ break;
+
+ case etree_name:
+ fold_name (tree);
+ break;
+
+ default:
+ FAIL ();
+ memset (&expld.result, 0, sizeof (expld.result));
+ break;
+ }
+}
+
+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;
+
+ value.type.node_code = code;
+ 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 = stat_alloc (sizeof (new->binary));
+ memcpy (new, &value, sizeof (new->binary));
+ return new;
+}
+
+etree_type *
+exp_trinop (int code, etree_type *cond, etree_type *lhs, etree_type *rhs)
+{
+ etree_type value, *new;
+
+ value.type.node_code = code;
+ 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 = stat_alloc (sizeof (new->trinary));
+ memcpy (new, &value, sizeof (new->trinary));
+ return new;
+}
+
+etree_type *
+exp_unop (int code, etree_type *child)
+{
+ etree_type value, *new;
+
+ value.unary.type.node_code = code;
+ 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 = stat_alloc (sizeof (new->unary));
+ memcpy (new, &value, sizeof (new->unary));
+ return new;
+}
+
+etree_type *
+exp_nameop (int code, const char *name)
+{
+ etree_type value, *new;
+
+ value.name.type.node_code = code;
+ 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 = stat_alloc (sizeof (new->name));
+ memcpy (new, &value, sizeof (new->name));
+ return new;
+
+}
+
+etree_type *
+exp_assop (int code, const char *dst, etree_type *src)
+{
+ etree_type *new;
+
+ new = stat_alloc (sizeof (new->assign));
+ new->type.node_code = code;
+ new->type.node_class = etree_assign;
+ new->assign.src = src;
+ new->assign.dst = dst;
+ return new;
+}
+
+/* Handle PROVIDE. */
+
+etree_type *
+exp_provide (const char *dst, etree_type *src, bfd_boolean hidden)
+{
+ etree_type *n;
+
+ n = stat_alloc (sizeof (n->assign));
+ n->assign.type.node_code = '=';
+ 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 = stat_alloc (sizeof (n->assert_s));
+ n->assert_s.type.node_code = '!';
+ 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)
+{
+ 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:
+ fprintf (config.map_file, "%s", tree->assign.dst);
+ 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);
+ fprintf (config.map_file, ")");
+ break;
+ case etree_binary:
+ fprintf (config.map_file, "(");
+ exp_print_tree (tree->binary.lhs);
+ exp_print_token (tree->type.node_code, TRUE);
+ exp_print_tree (tree->binary.rhs);
+ fprintf (config.map_file, ")");
+ break;
+ case etree_trinary:
+ exp_print_tree (tree->trinary.cond);
+ fprintf (config.map_file, "?");
+ exp_print_tree (tree->trinary.lhs);
+ fprintf (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);
+ fprintf (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)
+ {
+ fprintf (config.map_file, "%s", tree->name.name);
+ }
+ 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 = 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 = 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)
+ {
+ expld.result.value += expld.result.section->vma;
+ return expld.result.value;
+ }
+ else if (name != NULL && expld.phase != lang_mark_phase_enum)
+ einfo (_("%F%S non constant 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.17/ld/ldexp.h b/binutils-2.17/ld/ldexp.h
new file mode 100644
index 00000000..fed3a0da
--- /dev/null
+++ b/binutils-2.17/ld/ldexp.h
@@ -0,0 +1,183 @@
+/* ldexp.h -
+ Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2004, 2005 Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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 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;
+
+typedef struct {
+ int node_code;
+ enum {
+ etree_binary,
+ etree_trinary,
+ etree_unary,
+ etree_name,
+ etree_assign,
+ etree_provide,
+ etree_provided,
+ etree_value,
+ etree_assert,
+ etree_rel
+ } 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;
+
+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 {
+ exp_dataseg_none,
+ exp_dataseg_align_seen,
+ exp_dataseg_relro_seen,
+ exp_dataseg_end_seen,
+ exp_dataseg_relro_adjust,
+ exp_dataseg_adjust
+ } phase;
+
+ bfd_vma base, min_base, relro_end, end, pagesize, maxpagesize;
+ } 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.17/ld/ldfile.c b/binutils-2.17/ld/ldfile.c
new file mode 100644
index 00000000..69d8fd91
--- /dev/null
+++ b/binutils-2.17/ld/ldfile.c
@@ -0,0 +1,547 @@
+/* Linker file opening and searching.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
+ 2003, 2004, 2005 Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+/* ldfile.c: look after all the file stuff. */
+
+#include "bfd.h"
+#include "sysdep.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"
+
+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;
+
+ if (!cmdline && config.only_cmd_line_lib_dirs)
+ return;
+
+ new = xmalloc (sizeof (search_dirs_type));
+ new->next = NULL;
+ new->cmdline = cmdline;
+ *search_tail_ptr = new;
+ search_tail_ptr = &new->next;
+
+ /* If a directory is marked as honoring sysroot, prepend the sysroot path
+ now. */
+ if (name[0] == '=')
+ {
+ new->name = concat (ld_sysroot, name + 1, NULL);
+ new->sysrooted = TRUE;
+ }
+ else
+ {
+ new->name = xstrdup (name);
+ new->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;
+ }
+
+ /* 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. */
+
+ 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)
+ {
+ 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;
+ }
+ }
+ return TRUE;
+ }
+
+ 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, 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 (output_bfd) == bfd_target_xcoff_flavour
+ && bfd_check_format (entry->the_bfd, bfd_archive)))
+ {
+ 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;
+ }
+ }
+ }
+
+ 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;
+ }
+ }
+
+ string = xmalloc (strlen (search->name)
+ + strlen (slash)
+ + strlen (lib)
+ + strlen (entry->filename)
+ + strlen (arch)
+ + strlen (suffix)
+ + 1);
+
+ if (entry->is_archive)
+ sprintf (string, "%s%s%s%s%s%s", search->name, slash,
+ lib, entry->filename, arch, suffix);
+ else
+ sprintf (string, "%s%s%s", search->name, slash, entry->filename);
+
+ 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. */
+
+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 (_("%F%P: %s (%s): No such file: %E\n"),
+ entry->filename, entry->local_sym_name);
+ else
+ einfo (_("%F%P: %s: No such file: %E\n"), entry->local_sym_name);
+ }
+ 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 (_("%F%P: cannot find %s inside %s\n"),
+ entry->local_sym_name, ld_sysroot);
+ else
+ einfo (_("%F%P: cannot find %s\n"), entry->local_sym_name);
+ }
+}
+
+/* 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;
+ char buff[1000];
+
+ 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)
+ {
+ sprintf (buff, "%s%s", name, exten);
+ 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);
+ }
+ }
+
+ return result;
+}
+
+/* Try to open NAME; if that fails, look for it in any directories
+ specified with -L, without and with EXTEND appended. */
+
+static FILE *
+ldfile_find_command_file (const char *name, const char *extend)
+{
+ search_dirs_type *search;
+ FILE *result;
+ char buffer[1000];
+
+ /* First try raw name. */
+ result = try_open (name, "");
+ if (result == NULL)
+ {
+ /* Try now prefixes. */
+ for (search = search_head; search != NULL; search = search->next)
+ {
+ sprintf (buffer, "%s%s%s", search->name, slash, name);
+
+ result = try_open (buffer, extend);
+ if (result)
+ break;
+ }
+ }
+
+ return result;
+}
+
+void
+ldfile_open_command_file (const char *name)
+{
+ FILE *ldlex_input_stack;
+ ldlex_input_stack = ldfile_find_command_file (name, "");
+
+ 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;
+}
+
+void
+ldfile_add_arch (const char *in_name)
+{
+ char *name = xstrdup (in_name);
+ search_arch_type *new = xmalloc (sizeof (search_arch_type));
+
+ ldfile_output_machine_name = in_name;
+
+ new->name = name;
+ new->next = NULL;
+ while (*name)
+ {
+ *name = TOLOWER (*name);
+ name++;
+ }
+ *search_arch_tail_ptr = new;
+ search_arch_tail_ptr = &new->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.17/ld/ldfile.h b/binutils-2.17/ld/ldfile.h
new file mode 100644
index 00000000..b9ace6b7
--- /dev/null
+++ b/binutils-2.17/ld/ldfile.h
@@ -0,0 +1,63 @@
+/* ldfile.h -
+ Copyright 1991, 1992, 1993, 1994, 1995, 2000, 2002, 2003, 2004
+ Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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 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_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.17/ld/ldgram.c b/binutils-2.17/ld/ldgram.c
new file mode 100644
index 00000000..37385a6a
--- /dev/null
+++ b/binutils-2.17/ld/ldgram.c
@@ -0,0 +1,4163 @@
+/* A Bison parser, made by GNU Bison 2.1. */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 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, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 of Bison. */
+
+/* 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.1"
+
+/* 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,
+ DATA_SEGMENT_ALIGN = 289,
+ DATA_SEGMENT_RELRO_END = 290,
+ DATA_SEGMENT_END = 291,
+ SORT_BY_NAME = 292,
+ SORT_BY_ALIGNMENT = 293,
+ SIZEOF_HEADERS = 294,
+ OUTPUT_FORMAT = 295,
+ FORCE_COMMON_ALLOCATION = 296,
+ OUTPUT_ARCH = 297,
+ INHIBIT_COMMON_ALLOCATION = 298,
+ SEGMENT_START = 299,
+ INCLUDE = 300,
+ MEMORY = 301,
+ DEFSYMEND = 302,
+ NOLOAD = 303,
+ DSECT = 304,
+ COPY = 305,
+ INFO = 306,
+ OVERLAY = 307,
+ DEFINED = 308,
+ TARGET_K = 309,
+ SEARCH_DIR = 310,
+ MAP = 311,
+ ENTRY = 312,
+ NEXT = 313,
+ SIZEOF = 314,
+ ADDR = 315,
+ LOADADDR = 316,
+ MAX_K = 317,
+ MIN_K = 318,
+ STARTUP = 319,
+ HLL = 320,
+ SYSLIB = 321,
+ FLOAT = 322,
+ NOFLOAT = 323,
+ NOCROSSREFS = 324,
+ ORIGIN = 325,
+ FILL = 326,
+ LENGTH = 327,
+ CREATE_OBJECT_SYMBOLS = 328,
+ INPUT = 329,
+ GROUP = 330,
+ OUTPUT = 331,
+ CONSTRUCTORS = 332,
+ ALIGNMOD = 333,
+ AT = 334,
+ SUBALIGN = 335,
+ PROVIDE = 336,
+ PROVIDE_HIDDEN = 337,
+ AS_NEEDED = 338,
+ CHIP = 339,
+ LIST = 340,
+ SECT = 341,
+ ABSOLUTE = 342,
+ LOAD = 343,
+ NEWLINE = 344,
+ ENDWORD = 345,
+ ORDER = 346,
+ NAMEWORD = 347,
+ ASSERT_K = 348,
+ FORMAT = 349,
+ PUBLIC = 350,
+ BASE = 351,
+ ALIAS = 352,
+ TRUNCATE = 353,
+ REL = 354,
+ INPUT_SCRIPT = 355,
+ INPUT_MRI_SCRIPT = 356,
+ INPUT_DEFSYM = 357,
+ CASE = 358,
+ EXTERN = 359,
+ START = 360,
+ VERS_TAG = 361,
+ VERS_IDENTIFIER = 362,
+ GLOBAL = 363,
+ LOCAL = 364,
+ VERSIONK = 365,
+ INPUT_VERSION_SCRIPT = 366,
+ KEEP = 367,
+ ONLY_IF_RO = 368,
+ ONLY_IF_RW = 369,
+ SPECIAL = 370,
+ EXCLUDE_FILE = 371
+ };
+#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 DATA_SEGMENT_ALIGN 289
+#define DATA_SEGMENT_RELRO_END 290
+#define DATA_SEGMENT_END 291
+#define SORT_BY_NAME 292
+#define SORT_BY_ALIGNMENT 293
+#define SIZEOF_HEADERS 294
+#define OUTPUT_FORMAT 295
+#define FORCE_COMMON_ALLOCATION 296
+#define OUTPUT_ARCH 297
+#define INHIBIT_COMMON_ALLOCATION 298
+#define SEGMENT_START 299
+#define INCLUDE 300
+#define MEMORY 301
+#define DEFSYMEND 302
+#define NOLOAD 303
+#define DSECT 304
+#define COPY 305
+#define INFO 306
+#define OVERLAY 307
+#define DEFINED 308
+#define TARGET_K 309
+#define SEARCH_DIR 310
+#define MAP 311
+#define ENTRY 312
+#define NEXT 313
+#define SIZEOF 314
+#define ADDR 315
+#define LOADADDR 316
+#define MAX_K 317
+#define MIN_K 318
+#define STARTUP 319
+#define HLL 320
+#define SYSLIB 321
+#define FLOAT 322
+#define NOFLOAT 323
+#define NOCROSSREFS 324
+#define ORIGIN 325
+#define FILL 326
+#define LENGTH 327
+#define CREATE_OBJECT_SYMBOLS 328
+#define INPUT 329
+#define GROUP 330
+#define OUTPUT 331
+#define CONSTRUCTORS 332
+#define ALIGNMOD 333
+#define AT 334
+#define SUBALIGN 335
+#define PROVIDE 336
+#define PROVIDE_HIDDEN 337
+#define AS_NEEDED 338
+#define CHIP 339
+#define LIST 340
+#define SECT 341
+#define ABSOLUTE 342
+#define LOAD 343
+#define NEWLINE 344
+#define ENDWORD 345
+#define ORDER 346
+#define NAMEWORD 347
+#define ASSERT_K 348
+#define FORMAT 349
+#define PUBLIC 350
+#define BASE 351
+#define ALIAS 352
+#define TRUNCATE 353
+#define REL 354
+#define INPUT_SCRIPT 355
+#define INPUT_MRI_SCRIPT 356
+#define INPUT_DEFSYM 357
+#define CASE 358
+#define EXTERN 359
+#define START 360
+#define VERS_TAG 361
+#define VERS_IDENTIFIER 362
+#define GLOBAL 363
+#define LOCAL 364
+#define VERSIONK 365
+#define INPUT_VERSION_SCRIPT 366
+#define KEEP 367
+#define ONLY_IF_RO 368
+#define ONLY_IF_RW 369
+#define SPECIAL 370
+#define EXCLUDE_FILE 371
+
+
+
+
+/* Copy the first part of user declarations. */
+#line 22 "ldgram.y"
+
+/*
+
+ */
+
+#define DONTDECLARE_MALLOC
+
+#include "bfd.h"
+#include "sysdep.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;
+
+FILE *saved_script_handle = NULL;
+bfd_boolean force_make_executable = FALSE;
+
+bfd_boolean ldgram_in_script = FALSE;
+bfd_boolean ldgram_had_equals = FALSE;
+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)
+#line 65 "ldgram.y"
+typedef union YYSTYPE {
+ 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;
+} YYSTYPE;
+/* Line 196 of yacc.c. */
+#line 390 "ldgram.c"
+# 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 219 of yacc.c. */
+#line 402 "ldgram.c"
+
+#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+# define YYSIZE_T __SIZE_TYPE__
+#endif
+#if ! defined (YYSIZE_T) && defined (size_t)
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+#endif
+#if ! defined (YYSIZE_T)
+# define YYSIZE_T unsigned int
+#endif
+
+#ifndef YY_
+# if 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
+
+#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
+# else
+# define YYSTACK_ALLOC alloca
+# if defined (__STDC__) || defined (__cplusplus)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# define YYINCLUDED_STDLIB_H
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (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 2005 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
+# endif
+# ifdef __cplusplus
+extern "C" {
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
+ && (defined (__STDC__) || defined (__cplusplus)))
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
+ && (defined (__STDC__) || defined (__cplusplus)))
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifdef __cplusplus
+}
+# 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
+{
+ short int 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 (short int) + 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 (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 (0)
+
+#endif
+
+#if defined (__STDC__) || defined (__cplusplus)
+ typedef signed char yysigned_char;
+#else
+ typedef short int yysigned_char;
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 14
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 1716
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 140
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 114
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 333
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 707
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 371
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const unsigned char 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, 138, 2, 2, 2, 34, 21, 2,
+ 37, 135, 32, 30, 133, 31, 2, 33, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 16, 134,
+ 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, 136, 2, 137, 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, 53, 19, 54, 139, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 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, 55, 56, 57, 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
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const unsigned short int yyprhs[] =
+{
+ 0, 0, 3, 6, 9, 12, 15, 17, 18, 23,
+ 24, 27, 31, 32, 35, 40, 42, 44, 47, 49,
+ 54, 59, 63, 66, 71, 75, 80, 85, 90, 95,
+ 100, 103, 106, 109, 114, 119, 122, 125, 128, 131,
+ 132, 138, 141, 142, 146, 149, 150, 152, 156, 158,
+ 162, 163, 165, 169, 171, 174, 178, 179, 182, 185,
+ 186, 188, 190, 192, 194, 196, 198, 200, 202, 204,
+ 206, 211, 216, 221, 226, 235, 240, 242, 244, 249,
+ 250, 256, 261, 262, 268, 273, 278, 280, 284, 287,
+ 289, 293, 296, 297, 303, 304, 312, 313, 320, 325,
+ 328, 331, 332, 337, 340, 341, 349, 351, 353, 355,
+ 357, 363, 368, 373, 381, 389, 397, 405, 414, 417,
+ 419, 423, 425, 427, 431, 436, 438, 439, 445, 448,
+ 450, 452, 454, 459, 461, 466, 471, 474, 476, 477,
+ 479, 481, 483, 485, 487, 489, 491, 494, 495, 497,
+ 499, 501, 503, 505, 507, 509, 511, 513, 515, 519,
+ 523, 530, 537, 539, 540, 546, 549, 553, 554, 555,
+ 563, 567, 571, 572, 576, 578, 581, 583, 586, 591,
+ 596, 600, 604, 606, 611, 615, 616, 618, 620, 621,
+ 624, 628, 629, 632, 635, 639, 644, 647, 650, 653,
+ 657, 661, 665, 669, 673, 677, 681, 685, 689, 693,
+ 697, 701, 705, 709, 713, 717, 723, 727, 731, 736,
+ 738, 740, 745, 750, 755, 760, 765, 772, 779, 786,
+ 791, 798, 803, 805, 812, 819, 826, 831, 836, 840,
+ 841, 846, 847, 852, 853, 858, 859, 861, 863, 865,
+ 866, 867, 868, 869, 870, 871, 891, 892, 893, 894,
+ 895, 896, 915, 916, 917, 925, 927, 929, 931, 933,
+ 935, 939, 940, 943, 947, 950, 957, 968, 971, 973,
+ 974, 976, 979, 980, 981, 985, 986, 987, 988, 989,
+ 1001, 1006, 1007, 1010, 1011, 1012, 1019, 1021, 1022, 1026,
+ 1032, 1033, 1037, 1038, 1041, 1042, 1048, 1050, 1053, 1058,
+ 1064, 1071, 1073, 1076, 1077, 1080, 1085, 1090, 1099, 1101,
+ 1103, 1107, 1111, 1112, 1122, 1123, 1131, 1133, 1137, 1139,
+ 1143, 1145, 1149, 1150
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const short int yyrhs[] =
+{
+ 141, 0, -1, 116, 155, -1, 117, 145, -1, 127,
+ 242, -1, 118, 143, -1, 4, -1, -1, 144, 4,
+ 6, 204, -1, -1, 146, 147, -1, 147, 148, 105,
+ -1, -1, 100, 204, -1, 100, 204, 133, 204, -1,
+ 4, -1, 101, -1, 107, 150, -1, 106, -1, 111,
+ 4, 6, 204, -1, 111, 4, 133, 204, -1, 111,
+ 4, 204, -1, 110, 4, -1, 102, 4, 133, 204,
+ -1, 102, 4, 204, -1, 102, 4, 6, 204, -1,
+ 38, 4, 6, 204, -1, 38, 4, 133, 204, -1,
+ 94, 4, 6, 204, -1, 94, 4, 133, 204, -1,
+ 103, 152, -1, 104, 151, -1, 108, 4, -1, 113,
+ 4, 133, 4, -1, 113, 4, 133, 3, -1, 112,
+ 204, -1, 114, 3, -1, 119, 153, -1, 120, 154,
+ -1, -1, 61, 142, 149, 147, 36, -1, 121, 4,
+ -1, -1, 150, 133, 4, -1, 150, 4, -1, -1,
+ 4, -1, 151, 133, 4, -1, 4, -1, 152, 133,
+ 4, -1, -1, 4, -1, 153, 133, 4, -1, 4,
+ -1, 154, 4, -1, 154, 133, 4, -1, -1, 156,
+ 157, -1, 157, 158, -1, -1, 186, -1, 165, -1,
+ 234, -1, 195, -1, 196, -1, 198, -1, 200, -1,
+ 167, -1, 244, -1, 134, -1, 70, 37, 4, 135,
+ -1, 71, 37, 142, 135, -1, 92, 37, 142, 135,
+ -1, 56, 37, 4, 135, -1, 56, 37, 4, 133,
+ 4, 133, 4, 135, -1, 58, 37, 4, 135, -1,
+ 57, -1, 59, -1, 90, 37, 161, 135, -1, -1,
+ 91, 159, 37, 161, 135, -1, 72, 37, 142, 135,
+ -1, -1, 61, 142, 160, 157, 36, -1, 85, 37,
+ 201, 135, -1, 120, 37, 154, 135, -1, 4, -1,
+ 161, 133, 4, -1, 161, 4, -1, 5, -1, 161,
+ 133, 5, -1, 161, 5, -1, -1, 99, 37, 162,
+ 161, 135, -1, -1, 161, 133, 99, 37, 163, 161,
+ 135, -1, -1, 161, 99, 37, 164, 161, 135, -1,
+ 46, 53, 166, 54, -1, 166, 210, -1, 166, 167,
+ -1, -1, 73, 37, 4, 135, -1, 184, 183, -1,
+ -1, 109, 168, 37, 204, 133, 4, 135, -1, 4,
+ -1, 32, -1, 15, -1, 169, -1, 132, 37, 171,
+ 135, 169, -1, 51, 37, 169, 135, -1, 52, 37,
+ 169, 135, -1, 51, 37, 52, 37, 169, 135, 135,
+ -1, 51, 37, 51, 37, 169, 135, 135, -1, 52,
+ 37, 51, 37, 169, 135, 135, -1, 52, 37, 52,
+ 37, 169, 135, 135, -1, 51, 37, 132, 37, 171,
+ 135, 169, 135, -1, 171, 169, -1, 169, -1, 172,
+ 185, 170, -1, 170, -1, 4, -1, 136, 172, 137,
+ -1, 170, 37, 172, 135, -1, 173, -1, -1, 128,
+ 37, 175, 173, 135, -1, 184, 183, -1, 89, -1,
+ 134, -1, 93, -1, 51, 37, 93, 135, -1, 174,
+ -1, 179, 37, 202, 135, -1, 87, 37, 180, 135,
+ -1, 177, 176, -1, 176, -1, -1, 177, -1, 41,
+ -1, 42, -1, 43, -1, 44, -1, 45, -1, 202,
+ -1, 6, 180, -1, -1, 14, -1, 13, -1, 12,
+ -1, 11, -1, 10, -1, 9, -1, 8, -1, 7,
+ -1, 134, -1, 133, -1, 4, 6, 202, -1, 4,
+ 182, 202, -1, 97, 37, 4, 6, 202, 135, -1,
+ 98, 37, 4, 6, 202, 135, -1, 133, -1, -1,
+ 62, 53, 188, 187, 54, -1, 187, 188, -1, 187,
+ 133, 188, -1, -1, -1, 4, 189, 192, 16, 190,
+ 185, 191, -1, 86, 6, 202, -1, 88, 6, 202,
+ -1, -1, 37, 193, 135, -1, 194, -1, 193, 194,
+ -1, 4, -1, 138, 4, -1, 80, 37, 142, 135,
+ -1, 81, 37, 197, 135, -1, 81, 37, 135, -1,
+ 197, 185, 142, -1, 142, -1, 82, 37, 199, 135,
+ -1, 199, 185, 142, -1, -1, 83, -1, 84, -1,
+ -1, 4, 201, -1, 4, 133, 201, -1, -1, 203,
+ 204, -1, 31, 204, -1, 37, 204, 135, -1, 74,
+ 37, 204, 135, -1, 138, 204, -1, 30, 204, -1,
+ 139, 204, -1, 204, 32, 204, -1, 204, 33, 204,
+ -1, 204, 34, 204, -1, 204, 30, 204, -1, 204,
+ 31, 204, -1, 204, 29, 204, -1, 204, 28, 204,
+ -1, 204, 23, 204, -1, 204, 22, 204, -1, 204,
+ 27, 204, -1, 204, 26, 204, -1, 204, 24, 204,
+ -1, 204, 25, 204, -1, 204, 21, 204, -1, 204,
+ 20, 204, -1, 204, 19, 204, -1, 204, 15, 204,
+ 16, 204, -1, 204, 18, 204, -1, 204, 17, 204,
+ -1, 69, 37, 4, 135, -1, 3, -1, 55, -1,
+ 75, 37, 4, 135, -1, 76, 37, 4, 135, -1,
+ 77, 37, 4, 135, -1, 103, 37, 204, 135, -1,
+ 38, 37, 204, 135, -1, 38, 37, 204, 133, 204,
+ 135, -1, 48, 37, 204, 133, 204, 135, -1, 49,
+ 37, 204, 133, 204, 135, -1, 50, 37, 204, 135,
+ -1, 60, 37, 4, 133, 204, 135, -1, 39, 37,
+ 204, 135, -1, 4, -1, 78, 37, 204, 133, 204,
+ 135, -1, 79, 37, 204, 133, 204, 135, -1, 109,
+ 37, 204, 133, 4, 135, -1, 86, 37, 4, 135,
+ -1, 88, 37, 4, 135, -1, 95, 25, 4, -1,
+ -1, 95, 37, 204, 135, -1, -1, 38, 37, 204,
+ 135, -1, -1, 96, 37, 204, 135, -1, -1, 129,
+ -1, 130, -1, 131, -1, -1, -1, -1, -1, -1,
+ -1, 4, 211, 225, 206, 207, 208, 212, 209, 53,
+ 213, 178, 54, 214, 228, 205, 229, 181, 215, 185,
+ -1, -1, -1, -1, -1, -1, 68, 216, 226, 227,
+ 206, 208, 217, 53, 218, 230, 54, 219, 228, 205,
+ 229, 181, 220, 185, -1, -1, -1, 91, 221, 225,
+ 222, 53, 166, 54, -1, 64, -1, 65, -1, 66,
+ -1, 67, -1, 68, -1, 37, 223, 135, -1, -1,
+ 37, 135, -1, 204, 224, 16, -1, 224, 16, -1,
+ 40, 37, 204, 135, 224, 16, -1, 40, 37, 204,
+ 135, 39, 37, 204, 135, 224, 16, -1, 204, 16,
+ -1, 16, -1, -1, 85, -1, 25, 4, -1, -1,
+ -1, 229, 16, 4, -1, -1, -1, -1, -1, 230,
+ 4, 231, 53, 178, 54, 232, 229, 181, 233, 185,
+ -1, 47, 53, 235, 54, -1, -1, 235, 236, -1,
+ -1, -1, 4, 237, 239, 240, 238, 134, -1, 204,
+ -1, -1, 4, 241, 240, -1, 95, 37, 204, 135,
+ 240, -1, -1, 37, 204, 135, -1, -1, 243, 246,
+ -1, -1, 245, 126, 53, 246, 54, -1, 247, -1,
+ 246, 247, -1, 53, 249, 54, 134, -1, 122, 53,
+ 249, 54, 134, -1, 122, 53, 249, 54, 248, 134,
+ -1, 122, -1, 248, 122, -1, -1, 250, 134, -1,
+ 124, 16, 250, 134, -1, 125, 16, 250, 134, -1,
+ 124, 16, 250, 134, 125, 16, 250, 134, -1, 123,
+ -1, 4, -1, 250, 134, 123, -1, 250, 134, 4,
+ -1, -1, 250, 134, 120, 4, 53, 251, 250, 253,
+ 54, -1, -1, 120, 4, 53, 252, 250, 253, 54,
+ -1, 124, -1, 250, 134, 124, -1, 125, -1, 250,
+ 134, 125, -1, 120, -1, 250, 134, 120, -1, -1,
+ 134, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const unsigned short int yyrline[] =
+{
+ 0, 162, 162, 163, 164, 165, 169, 173, 173, 183,
+ 183, 196, 197, 201, 202, 203, 206, 209, 210, 211,
+ 213, 215, 217, 219, 221, 223, 225, 227, 229, 231,
+ 233, 234, 235, 237, 239, 241, 243, 245, 246, 248,
+ 247, 251, 253, 257, 258, 259, 263, 265, 269, 271,
+ 276, 277, 278, 282, 284, 286, 291, 291, 302, 303,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
+ 319, 321, 323, 325, 328, 330, 332, 334, 336, 338,
+ 337, 341, 344, 343, 347, 351, 355, 358, 361, 364,
+ 367, 370, 374, 373, 378, 377, 382, 381, 388, 392,
+ 393, 394, 398, 400, 401, 401, 409, 413, 417, 424,
+ 430, 436, 442, 448, 454, 460, 466, 472, 481, 490,
+ 501, 510, 521, 529, 533, 540, 542, 541, 548, 549,
+ 553, 554, 559, 564, 565, 570, 577, 578, 581, 583,
+ 587, 589, 591, 593, 595, 600, 607, 609, 613, 615,
+ 617, 619, 621, 623, 625, 627, 632, 632, 637, 641,
+ 649, 653, 661, 661, 665, 669, 670, 671, 676, 675,
+ 683, 691, 699, 700, 704, 705, 709, 711, 716, 721,
+ 722, 727, 729, 735, 737, 739, 743, 745, 751, 754,
+ 763, 774, 774, 780, 782, 784, 786, 788, 790, 793,
+ 795, 797, 799, 801, 803, 805, 807, 809, 811, 813,
+ 815, 817, 819, 821, 823, 825, 827, 829, 831, 833,
+ 835, 838, 840, 842, 844, 846, 848, 850, 852, 854,
+ 856, 865, 867, 869, 871, 873, 875, 877, 883, 884,
+ 888, 889, 893, 894, 898, 899, 903, 904, 905, 906,
+ 909, 913, 916, 922, 924, 909, 931, 933, 935, 940,
+ 942, 930, 952, 954, 952, 962, 963, 964, 965, 966,
+ 970, 971, 972, 976, 977, 982, 983, 988, 989, 994,
+ 995, 1000, 1002, 1007, 1010, 1023, 1027, 1032, 1034, 1025,
+ 1042, 1045, 1047, 1051, 1052, 1051, 1061, 1106, 1109, 1121,
+ 1130, 1133, 1142, 1142, 1156, 1156, 1166, 1167, 1171, 1175,
+ 1179, 1186, 1190, 1198, 1201, 1205, 1209, 1213, 1220, 1224,
+ 1228, 1232, 1237, 1236, 1250, 1249, 1259, 1263, 1267, 1271,
+ 1275, 1279, 1285, 1287
+};
+#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", "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", "DEFSYMEND", "NOLOAD", "DSECT",
+ "COPY", "INFO", "OVERLAY", "DEFINED", "TARGET_K", "SEARCH_DIR", "MAP",
+ "ENTRY", "NEXT", "SIZEOF", "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", "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", "','", "';'", "')'", "'['", "']'", "'!'", "'~'",
+ "$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", "script_file", "@4", "ifile_list", "ifile_p1", "@5",
+ "@6", "input_list", "@7", "@8", "@9", "sections", "sec_or_group_p1",
+ "statement_anywhere", "@10", "wildcard_name", "wildcard_spec",
+ "exclude_name_list", "file_NAME_list", "input_section_spec_no_keep",
+ "input_section_spec", "@11", "statement", "statement_list",
+ "statement_list_opt", "length", "fill_exp", "fill_opt", "assign_op",
+ "end", "assignment", "opt_comma", "memory", "memory_spec_list",
+ "memory_spec", "@12", "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", "@13", "exp", "memspec_at_opt",
+ "opt_at", "opt_align", "opt_subalign", "sect_constraint", "section",
+ "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23",
+ "@24", "@25", "type", "atype", "opt_exp_with_type",
+ "opt_exp_without_type", "opt_nocrossrefs", "memspec_opt", "phdr_opt",
+ "overlay_section", "@26", "@27", "@28", "phdrs", "phdr_list", "phdr",
+ "@29", "@30", "phdr_type", "phdr_qualifiers", "phdr_val",
+ "version_script_file", "@31", "version", "@32", "vers_nodes",
+ "vers_node", "verdep", "vers_tag", "vers_defns", "@33", "@34",
+ "opt_semicolon", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const unsigned short int 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, 123, 125, 294, 295, 296, 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, 44, 59, 41, 91, 93, 33, 126
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const unsigned char yyr1[] =
+{
+ 0, 140, 141, 141, 141, 141, 142, 144, 143, 146,
+ 145, 147, 147, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 149,
+ 148, 148, 148, 150, 150, 150, 151, 151, 152, 152,
+ 153, 153, 153, 154, 154, 154, 156, 155, 157, 157,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 159,
+ 158, 158, 160, 158, 158, 158, 161, 161, 161, 161,
+ 161, 161, 162, 161, 163, 161, 164, 161, 165, 166,
+ 166, 166, 167, 167, 168, 167, 169, 169, 169, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170, 171, 171,
+ 172, 172, 173, 173, 173, 174, 175, 174, 176, 176,
+ 176, 176, 176, 176, 176, 176, 177, 177, 178, 178,
+ 179, 179, 179, 179, 179, 180, 181, 181, 182, 182,
+ 182, 182, 182, 182, 182, 182, 183, 183, 184, 184,
+ 184, 184, 185, 185, 186, 187, 187, 187, 189, 188,
+ 190, 191, 192, 192, 193, 193, 194, 194, 195, 196,
+ 196, 197, 197, 198, 199, 199, 200, 200, 201, 201,
+ 201, 203, 202, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 205, 205,
+ 206, 206, 207, 207, 208, 208, 209, 209, 209, 209,
+ 211, 212, 213, 214, 215, 210, 216, 217, 218, 219,
+ 220, 210, 221, 222, 210, 223, 223, 223, 223, 223,
+ 224, 224, 224, 225, 225, 225, 225, 226, 226, 227,
+ 227, 228, 228, 229, 229, 230, 231, 232, 233, 230,
+ 234, 235, 235, 237, 238, 236, 239, 240, 240, 240,
+ 241, 241, 243, 242, 245, 244, 246, 246, 247, 247,
+ 247, 248, 248, 249, 249, 249, 249, 249, 250, 250,
+ 250, 250, 251, 250, 252, 250, 250, 250, 250, 250,
+ 250, 250, 253, 253
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const unsigned char yyr2[] =
+{
+ 0, 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, 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, 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, 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, 5, 2, 3, 0, 0, 7,
+ 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, 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, 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, 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 unsigned short int yydefact[] =
+{
+ 0, 56, 9, 7, 302, 0, 2, 59, 3, 12,
+ 5, 0, 4, 0, 1, 57, 10, 0, 313, 0,
+ 303, 306, 0, 0, 0, 0, 76, 0, 77, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 186, 187,
+ 0, 0, 79, 0, 0, 0, 104, 0, 69, 58,
+ 61, 67, 0, 60, 63, 64, 65, 66, 62, 68,
+ 0, 15, 0, 0, 0, 0, 16, 0, 0, 0,
+ 18, 45, 0, 0, 0, 0, 0, 0, 50, 0,
+ 0, 0, 0, 319, 330, 318, 326, 328, 0, 0,
+ 313, 307, 191, 155, 154, 153, 152, 151, 150, 149,
+ 148, 191, 101, 291, 0, 0, 6, 82, 0, 0,
+ 0, 0, 0, 0, 0, 185, 188, 0, 0, 0,
+ 0, 0, 0, 0, 157, 156, 103, 0, 0, 39,
+ 0, 219, 232, 0, 0, 0, 0, 0, 0, 0,
+ 0, 220, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 13, 0, 48, 30,
+ 46, 31, 17, 32, 22, 0, 35, 0, 36, 51,
+ 37, 53, 38, 41, 11, 8, 0, 0, 0, 0,
+ 314, 0, 158, 0, 159, 0, 0, 0, 0, 59,
+ 168, 167, 0, 0, 0, 0, 0, 180, 182, 163,
+ 163, 188, 0, 86, 89, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 12, 0, 0, 197,
+ 193, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 196,
+ 198, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 24, 0, 0, 44, 0, 0, 0,
+ 21, 0, 0, 54, 0, 324, 326, 328, 0, 0,
+ 308, 321, 331, 320, 327, 329, 0, 192, 250, 98,
+ 256, 262, 100, 99, 293, 290, 292, 0, 73, 75,
+ 304, 172, 0, 70, 71, 81, 102, 178, 162, 179,
+ 0, 183, 0, 188, 189, 84, 92, 88, 91, 0,
+ 0, 78, 0, 72, 191, 191, 0, 85, 0, 26,
+ 27, 42, 28, 29, 194, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 217, 216, 214, 213, 212, 207, 206,
+ 210, 211, 209, 208, 205, 204, 202, 203, 199, 200,
+ 201, 14, 25, 23, 49, 47, 43, 19, 20, 34,
+ 33, 52, 55, 0, 315, 316, 0, 311, 309, 0,
+ 271, 0, 271, 0, 0, 83, 0, 0, 164, 0,
+ 165, 181, 184, 190, 0, 96, 87, 90, 0, 80,
+ 0, 0, 0, 305, 40, 0, 225, 231, 0, 0,
+ 229, 0, 218, 195, 221, 222, 223, 0, 0, 236,
+ 237, 224, 0, 0, 332, 329, 322, 312, 310, 0,
+ 0, 271, 0, 241, 278, 0, 279, 263, 296, 297,
+ 0, 176, 0, 0, 174, 0, 166, 0, 0, 94,
+ 160, 161, 0, 0, 0, 0, 0, 0, 0, 0,
+ 215, 333, 0, 0, 0, 265, 266, 267, 268, 269,
+ 272, 0, 0, 0, 0, 274, 0, 243, 277, 280,
+ 241, 0, 300, 0, 294, 0, 177, 173, 175, 0,
+ 163, 93, 0, 0, 105, 226, 227, 228, 230, 233,
+ 234, 235, 325, 0, 332, 270, 0, 273, 0, 0,
+ 245, 245, 101, 0, 297, 0, 0, 74, 191, 0,
+ 97, 0, 317, 0, 271, 0, 0, 0, 251, 257,
+ 0, 0, 298, 0, 295, 170, 0, 169, 95, 323,
+ 0, 0, 240, 0, 0, 249, 0, 264, 301, 297,
+ 191, 0, 275, 242, 0, 246, 247, 248, 0, 258,
+ 299, 171, 0, 244, 252, 285, 271, 138, 0, 0,
+ 122, 108, 107, 140, 141, 142, 143, 144, 0, 0,
+ 0, 129, 131, 0, 0, 130, 0, 109, 0, 125,
+ 133, 137, 139, 0, 0, 0, 286, 259, 276, 0,
+ 0, 191, 126, 0, 106, 0, 121, 163, 0, 136,
+ 253, 191, 128, 0, 282, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 145, 0, 119, 0, 0, 123,
+ 0, 163, 282, 0, 138, 0, 239, 0, 0, 132,
+ 0, 111, 0, 0, 112, 135, 106, 0, 0, 118,
+ 120, 124, 239, 134, 0, 281, 0, 283, 0, 0,
+ 0, 0, 0, 127, 110, 283, 287, 0, 147, 0,
+ 0, 0, 0, 0, 147, 283, 238, 191, 0, 260,
+ 114, 113, 0, 115, 116, 254, 147, 146, 284, 163,
+ 117, 163, 288, 261, 255, 163, 289
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const short int yydefgoto[] =
+{
+ -1, 5, 107, 10, 11, 8, 9, 16, 81, 216,
+ 162, 161, 159, 170, 172, 6, 7, 15, 49, 118,
+ 189, 206, 404, 503, 458, 50, 185, 51, 122, 597,
+ 598, 637, 617, 599, 600, 635, 601, 602, 603, 604,
+ 633, 689, 101, 126, 52, 640, 53, 302, 191, 301,
+ 500, 547, 397, 453, 454, 54, 55, 199, 56, 200,
+ 57, 202, 634, 183, 221, 667, 487, 520, 538, 568,
+ 293, 390, 555, 577, 642, 701, 391, 556, 575, 624,
+ 699, 392, 491, 481, 442, 443, 446, 490, 646, 678,
+ 578, 623, 685, 705, 58, 186, 296, 393, 526, 449,
+ 494, 524, 12, 13, 59, 60, 20, 21, 389, 88,
+ 89, 474, 383, 472
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -601
+static const short int yypact[] =
+{
+ 110, -601, -601, -601, -601, 51, -601, -601, -601, -601,
+ -601, 14, -601, -9, -601, 696, 1513, 59, 97, -21,
+ -9, -601, 860, 36, 44, 92, -601, 103, -601, 144,
+ 120, 141, 164, 168, 179, 181, 187, 198, -601, -601,
+ 212, 223, -601, 255, 258, 261, -601, 262, -601, -601,
+ -601, -601, 76, -601, -601, -601, -601, -601, -601, -601,
+ 174, -601, 232, 144, 297, 589, -601, 301, 302, 305,
+ -601, -601, 306, 309, 310, 589, 311, 313, 314, 316,
+ 317, 221, 589, -601, 328, -601, 320, 324, 279, 205,
+ 97, -601, -601, -601, -601, -601, -601, -601, -601, -601,
+ -601, -601, -601, -601, 337, 338, -601, -601, 344, 345,
+ 144, 144, 346, 144, 35, -601, 348, 26, 321, 144,
+ 350, 359, 327, 316, -601, -601, -601, 319, 9, -601,
+ 41, -601, -601, 589, 589, 589, 339, 340, 347, 355,
+ 364, -601, 365, 366, 367, 374, 375, 376, 381, 384,
+ 385, 387, 394, 395, 589, 589, 1322, 331, -601, 249,
+ -601, 250, 17, -601, -601, 445, 1682, 254, -601, -601,
+ 263, -601, 18, -601, -601, 1682, 380, 199, 199, 304,
+ 265, 390, -601, 589, -601, 369, 46, -90, 300, -601,
+ -601, -601, 312, 315, 318, 330, 336, -601, -601, 119,
+ 131, 32, 342, -601, -601, 402, 12, 26, 353, 435,
+ 439, 589, 69, -9, 589, 589, -601, 589, 589, -601,
+ -601, 905, 589, 589, 589, 589, 589, 442, 448, 589,
+ 450, 454, 455, 589, 589, 468, 469, 589, 589, -601,
+ -601, 589, 589, 589, 589, 589, 589, 589, 589, 589,
+ 589, 589, 589, 589, 589, 589, 589, 589, 589, 589,
+ 589, 589, 589, 1682, 475, 477, -601, 481, 589, 589,
+ 1682, 226, 485, -601, 486, -601, -601, -601, 357, 368,
+ -601, -601, 492, -601, -601, -601, -48, 1682, 860, -601,
+ -601, -601, -601, -601, -601, -601, -601, 500, -601, -601,
+ 767, 471, 10, -601, -601, -601, -601, -601, -601, -601,
+ 144, -601, 144, 348, -601, -601, -601, -601, -601, 472,
+ 78, -601, 24, -601, -601, -601, 1342, -601, -12, 1682,
+ 1682, 1535, 1682, 1682, -601, 885, 925, 1362, 1382, 945,
+ 373, 377, 965, 378, 382, 383, 1439, 1459, 391, 392,
+ 1004, 1479, 1642, 982, 1121, 1259, 1397, 707, 677, 677,
+ 573, 573, 573, 573, 210, 210, 247, 247, -601, -601,
+ -601, 1682, 1682, 1682, -601, -601, -601, 1682, 1682, -601,
+ -601, -601, -601, 199, 274, 265, 457, -601, -601, -46,
+ 30, 512, 30, 589, 397, -601, 8, 495, -601, 344,
+ -601, -601, -601, -601, 26, -601, -601, -601, 488, -601,
+ 399, 400, 528, -601, -601, 589, -601, -601, 589, 589,
+ -601, 589, -601, -601, -601, -601, -601, 589, 589, -601,
+ -601, -601, 534, 589, 405, 525, -601, -601, -601, 208,
+ 507, 1501, 529, 451, -601, 1662, 462, -601, 1682, 19,
+ 548, -601, 549, 6, -601, 470, -601, 115, 26, -601,
+ -601, -601, 420, 1024, 1044, 1064, 1084, 1104, 1143, 422,
+ 1682, 265, 504, 199, 199, -601, -601, -601, -601, -601,
+ -601, 424, 589, 362, 547, -601, 531, 532, -601, -601,
+ 451, 513, 536, 539, -601, 434, -601, -601, -601, 565,
+ 449, -601, 126, 26, -601, -601, -601, -601, -601, -601,
+ -601, -601, -601, 460, 405, -601, 1163, -601, 589, 558,
+ 503, 503, -601, 589, 19, 589, 476, -601, -601, 508,
+ -601, 132, 265, 555, 87, 1183, 589, 574, -601, -601,
+ 389, 1203, -601, 1223, -601, -601, 606, -601, -601, -601,
+ 576, 598, -601, 1243, 589, 159, 563, -601, -601, 19,
+ -601, 589, -601, -601, 1282, -601, -601, -601, 564, -601,
+ -601, -601, 1302, -601, -601, -601, 581, 628, 48, 607,
+ 675, -601, -601, -601, -601, -601, -601, -601, 585, 587,
+ 588, -601, -601, 592, 593, -601, 219, -601, 594, -601,
+ -601, -601, 628, 579, 597, 76, -601, -601, -601, 323,
+ 363, -601, -601, 62, -601, 599, -601, -5, 219, -601,
+ -601, -601, -601, 582, 615, 604, 605, 510, 609, 517,
+ 610, 611, 518, 519, -601, 83, -601, 23, 293, -601,
+ 219, 158, 615, 520, 628, 652, 562, 62, 62, -601,
+ 62, -601, 62, 62, -601, -601, 524, 526, 62, -601,
+ -601, -601, 562, -601, 608, -601, 649, -601, 541, 543,
+ 31, 556, 559, -601, -601, -601, -601, 686, 42, 560,
+ 561, 62, 578, 583, 42, -601, -601, -601, 689, -601,
+ -601, -601, 584, -601, -601, -601, 42, -601, -601, 449,
+ -601, 449, -601, -601, -601, 449, -601
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const short int yypgoto[] =
+{
+ -601, -601, -57, -601, -601, -601, -601, 483, -601, -601,
+ -601, -601, -601, -601, 591, -601, -601, 527, -601, -601,
+ -601, -196, -601, -601, -601, -601, 175, -180, -601, -73,
+ -559, 70, 104, 88, -601, -601, 122, -601, 100, -601,
+ 58, -600, -601, 142, -553, -198, -601, -601, -277, -601,
+ -601, -601, -601, -601, 295, -601, -601, -601, -601, -601,
+ -601, -175, -92, -601, -62, 84, 259, -601, 229, -601,
+ -601, -601, -601, -601, -601, -601, -601, -601, -601, -601,
+ -601, -601, -601, -601, -422, 371, -601, -601, 109, -558,
+ -601, -601, -601, -601, -601, -601, -601, -601, -601, -601,
+ -484, -601, -601, -601, -601, -601, 546, -16, -601, 671,
+ -170, -601, -601, 251
+};
+
+/* 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 -305
+static const short int yytable[] =
+{
+ 182, 310, 312, 156, 91, 292, 129, 278, 279, 184,
+ 451, 322, 451, 166, 190, 214, 317, 318, 17, 484,
+ 175, 266, 273, 492, 605, 400, 314, 614, 317, 318,
+ 203, 204, 90, 131, 132, 614, 201, 616, 581, 106,
+ 542, 18, 413, 297, 18, 298, 581, 217, 687, 605,
+ 294, 14, 606, 193, 194, 582, 196, 198, 688, 616,
+ 133, 134, 208, 582, 398, 82, 614, 439, 136, 137,
+ 440, 219, 220, 273, 387, 570, 437, 581, 138, 139,
+ 140, 660, 406, 407, 695, 141, 388, 656, 438, 102,
+ 142, 605, 239, 240, 582, 263, 702, 103, 581, 143,
+ 295, 83, 607, 270, 144, 145, 146, 147, 148, 149,
+ 19, 319, 551, 19, 493, 582, 150, 684, 151, 317,
+ 318, 287, 456, 319, 483, 205, 550, 696, 308, 104,
+ 317, 318, 639, 152, 615, 589, 317, 318, 403, 153,
+ 105, 497, 215, 399, 452, 320, 452, 321, 106, 326,
+ 267, 274, 329, 330, 579, 332, 333, 320, 658, 409,
+ 335, 336, 337, 338, 339, 313, 681, 342, 154, 155,
+ 197, 346, 347, 108, 218, 350, 351, 408, 109, 352,
+ 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
+ 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
+ 373, 110, 274, 83, 327, 111, 377, 378, 457, 124,
+ 125, 131, 132, 434, 319, 594, 112, 84, 113, 596,
+ 85, 86, 87, 614, 114, 319, 1, 2, 3, 379,
+ 380, 319, 410, 411, 581, 115, 128, 4, 133, 134,
+ 255, 256, 257, 258, 259, 135, 136, 137, 320, 116,
+ 501, 582, 308, 401, 309, 402, 138, 139, 140, 320,
+ 117, 530, 502, 141, 308, 320, 311, 548, 142, 281,
+ 615, 589, 475, 476, 477, 478, 479, 143, 281, 257,
+ 258, 259, 144, 145, 146, 147, 148, 149, 565, 566,
+ 567, 308, 119, 661, 150, 120, 151, 614, 121, 123,
+ 127, 130, 529, 513, 514, 157, 158, 531, 581, 160,
+ 163, 152, 91, 164, 165, 167, 168, 153, 169, 84,
+ 171, 173, 85, 276, 277, 582, 174, 614, 441, 445,
+ 441, 448, 176, 179, 131, 132, 177, 261, 581, 180,
+ 178, 187, 188, 480, 625, 626, 154, 155, 190, 192,
+ 195, 594, 201, 463, 209, 582, 464, 465, 207, 466,
+ 292, 133, 134, 210, 211, 467, 468, 614, 135, 136,
+ 137, 470, 213, 288, 625, 626, 222, 223, 581, 138,
+ 139, 140, 264, 265, 224, 282, 141, 271, 283, 284,
+ 285, 142, 225, 288, 282, 582, 272, 283, 284, 435,
+ 143, 226, 227, 228, 229, 144, 145, 146, 147, 148,
+ 149, 230, 231, 232, 630, 631, 627, 150, 233, 151,
+ 516, 234, 235, 289, 236, 628, 475, 476, 477, 478,
+ 479, 237, 238, 275, 152, 299, 545, 290, 280, 316,
+ 153, 324, 34, 557, 286, 325, 340, 303, 131, 132,
+ 304, 268, 341, 305, 343, 628, 535, 290, 344, 345,
+ 291, 541, 34, 543, 262, 306, 44, 45, 571, 154,
+ 155, 307, 348, 349, 553, 133, 134, 315, 46, 374,
+ 291, 375, 135, 136, 137, 376, 44, 45, 323, 381,
+ 382, 384, 564, 138, 139, 140, 386, 480, 46, 572,
+ 141, 703, 385, 704, 394, 142, 421, 706, 396, 405,
+ 436, 455, 422, 424, 143, 131, 132, 425, 426, 144,
+ 145, 146, 147, 148, 149, 459, 429, 430, 444, 643,
+ 450, 150, 462, 151, 460, 461, 629, 632, 469, 471,
+ 636, 473, 133, 134, 482, 485, 486, 489, 152, 135,
+ 136, 137, 495, 496, 153, 504, 499, 511, 512, 515,
+ 138, 139, 140, 517, 659, 629, 522, 141, 518, 527,
+ 519, 528, 142, 523, 668, 669, 525, 636, 269, 671,
+ 672, 143, 308, 154, 155, 674, 144, 145, 146, 147,
+ 148, 149, 131, 132, 532, 536, 546, 659, 150, 537,
+ 151, 253, 254, 255, 256, 257, 258, 259, 692, 549,
+ 544, 554, 560, 561, 562, 152, 569, 574, 483, 133,
+ 134, 153, 609, 608, 610, 611, 135, 136, 137, 612,
+ 613, 618, 580, 620, 621, 644, 638, 138, 139, 140,
+ 645, 647, 648, 581, 141, 649, 650, 652, 653, 142,
+ 154, 155, 651, 654, 655, 663, 665, 666, 143, -122,
+ 582, 673, 676, 144, 145, 146, 147, 148, 149, 583,
+ 584, 585, 586, 587, 677, 150, 679, 151, 680, 588,
+ 589, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+ 686, 682, 152, 698, 683, 690, 691, 540, 153, 331,
+ 22, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, -106, 693, 212, 590, 300, 591, 694, 700,
+ 670, 592, 641, 657, 619, 44, 45, 154, 155, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 23, 24, 664, 697, 675, 622, 498, 521,
+ 539, 662, 25, 26, 27, 28, 593, 29, 30, 328,
+ 594, 181, 595, 447, 596, 533, 31, 32, 33, 34,
+ 0, 22, 0, 0, 0, 0, 35, 36, 37, 38,
+ 39, 40, 0, 0, 0, 0, 41, 42, 43, 0,
+ 0, 0, 0, 44, 45, 0, 0, 0, 0, 0,
+ 0, 0, 0, 395, 0, 46, 0, 0, 0, 0,
+ 0, 0, 0, 23, 24, 0, 47, 0, 0, 0,
+ 0, 0, -304, 25, 26, 27, 28, 0, 29, 30,
+ 48, 0, 0, 0, 0, 0, 0, 31, 32, 33,
+ 34, 0, 0, 0, 0, 0, 0, 35, 36, 37,
+ 38, 39, 40, 0, 0, 0, 0, 41, 42, 43,
+ 0, 0, 0, 0, 44, 45, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 0, 46, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 47, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 241, 48, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 241, 0, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 241, 0, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 241, 0, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 241, 0, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 0, 415, 241,
+ 416, 242, 243, 244, 245, 246, 247, 248, 249, 250,
+ 251, 252, 253, 254, 255, 256, 257, 258, 259, 241,
+ 334, 242, 243, 244, 245, 246, 247, 248, 249, 250,
+ 251, 252, 253, 254, 255, 256, 257, 258, 259, 241,
+ 417, 242, 243, 244, 245, 246, 247, 248, 249, 250,
+ 251, 252, 253, 254, 255, 256, 257, 258, 259, 241,
+ 420, 242, 243, 244, 245, 246, 247, 248, 249, 250,
+ 251, 252, 253, 254, 255, 256, 257, 258, 259, 241,
+ 423, 242, 243, 244, 245, 246, 247, 248, 249, 250,
+ 251, 252, 253, 254, 255, 256, 257, 258, 259, 241,
+ 0, 242, 243, 244, 245, 246, 247, 248, 249, 250,
+ 251, 252, 253, 254, 255, 256, 257, 258, 259, 431,
+ 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
+ 254, 255, 256, 257, 258, 259, 0, 0, 241, 505,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 241, 506,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 241, 507,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 241, 508,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 241, 509,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 241, 0,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 510, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 0, 0, 0, 241, 534, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 241, 552, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 241, 558, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 241, 559, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 241, 563, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 241, 0, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 573, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 0, 0, 0, 0, 0, 576, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 241, 260, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 241, 412, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 241, 418, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 0, 419, 241, 61, 242, 243,
+ 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
+ 254, 255, 256, 257, 258, 259, 0, 0, 483, 61,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 62, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 414, 427, 62, 63, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 428, 0, 0, 0, 63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
+ 0, 0, 432, 65, 66, 67, 68, 69, -42, 70,
+ 71, 72, 0, 73, 74, 75, 76, 77, 0, 64,
+ 0, 0, 78, 79, 80, 65, 66, 67, 68, 69,
+ 0, 70, 71, 72, 0, 73, 74, 75, 76, 77,
+ 0, 0, 0, 0, 78, 79, 80, 241, 433, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 241, 488, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 241, 0, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259
+};
+
+static const short int yycheck[] =
+{
+ 92, 199, 200, 65, 20, 185, 63, 177, 178, 101,
+ 4, 207, 4, 75, 4, 6, 4, 5, 4, 441,
+ 82, 4, 4, 4, 577, 302, 201, 4, 4, 5,
+ 4, 5, 53, 3, 4, 4, 4, 596, 15, 4,
+ 524, 53, 54, 133, 53, 135, 15, 6, 6, 602,
+ 4, 0, 4, 110, 111, 32, 113, 114, 16, 618,
+ 30, 31, 119, 32, 54, 6, 4, 37, 38, 39,
+ 40, 133, 134, 4, 122, 559, 122, 15, 48, 49,
+ 50, 640, 4, 5, 684, 55, 134, 4, 134, 53,
+ 60, 644, 154, 155, 32, 157, 696, 53, 15, 69,
+ 54, 4, 54, 165, 74, 75, 76, 77, 78, 79,
+ 122, 99, 534, 122, 95, 32, 86, 675, 88, 4,
+ 5, 183, 399, 99, 37, 99, 39, 685, 133, 37,
+ 4, 5, 137, 103, 51, 52, 4, 5, 313, 109,
+ 37, 135, 133, 133, 138, 133, 138, 135, 4, 211,
+ 133, 133, 214, 215, 576, 217, 218, 133, 135, 135,
+ 222, 223, 224, 225, 226, 133, 135, 229, 138, 139,
+ 135, 233, 234, 53, 133, 237, 238, 99, 37, 241,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 37, 133, 4, 135, 37, 268, 269, 404, 133,
+ 134, 3, 4, 383, 99, 132, 37, 120, 37, 136,
+ 123, 124, 125, 4, 37, 99, 116, 117, 118, 3,
+ 4, 99, 324, 325, 15, 37, 4, 127, 30, 31,
+ 30, 31, 32, 33, 34, 37, 38, 39, 133, 37,
+ 135, 32, 133, 310, 135, 312, 48, 49, 50, 133,
+ 37, 135, 458, 55, 133, 133, 135, 135, 60, 4,
+ 51, 52, 64, 65, 66, 67, 68, 69, 4, 32,
+ 33, 34, 74, 75, 76, 77, 78, 79, 129, 130,
+ 131, 133, 37, 135, 86, 37, 88, 4, 37, 37,
+ 126, 4, 500, 473, 474, 4, 4, 503, 15, 4,
+ 4, 103, 328, 4, 4, 4, 3, 109, 4, 120,
+ 4, 4, 123, 124, 125, 32, 105, 4, 390, 391,
+ 392, 393, 4, 54, 3, 4, 16, 6, 15, 134,
+ 16, 4, 4, 135, 51, 52, 138, 139, 4, 4,
+ 4, 132, 4, 415, 4, 32, 418, 419, 37, 421,
+ 540, 30, 31, 4, 37, 427, 428, 4, 37, 38,
+ 39, 433, 53, 4, 51, 52, 37, 37, 15, 48,
+ 49, 50, 133, 133, 37, 120, 55, 133, 123, 124,
+ 125, 60, 37, 4, 120, 32, 133, 123, 124, 125,
+ 69, 37, 37, 37, 37, 74, 75, 76, 77, 78,
+ 79, 37, 37, 37, 51, 52, 93, 86, 37, 88,
+ 482, 37, 37, 54, 37, 132, 64, 65, 66, 67,
+ 68, 37, 37, 53, 103, 135, 528, 68, 134, 37,
+ 109, 6, 73, 54, 54, 6, 4, 135, 3, 4,
+ 135, 6, 4, 135, 4, 132, 518, 68, 4, 4,
+ 91, 523, 73, 525, 133, 135, 97, 98, 560, 138,
+ 139, 135, 4, 4, 536, 30, 31, 135, 109, 4,
+ 91, 4, 37, 38, 39, 4, 97, 98, 135, 4,
+ 4, 134, 554, 48, 49, 50, 4, 135, 109, 561,
+ 55, 699, 134, 701, 4, 60, 133, 705, 37, 37,
+ 53, 16, 135, 135, 69, 3, 4, 135, 135, 74,
+ 75, 76, 77, 78, 79, 37, 135, 135, 16, 621,
+ 133, 86, 4, 88, 135, 135, 609, 610, 4, 134,
+ 613, 16, 30, 31, 37, 16, 95, 85, 103, 37,
+ 38, 39, 4, 4, 109, 135, 86, 135, 54, 135,
+ 48, 49, 50, 16, 637, 638, 53, 55, 37, 135,
+ 38, 6, 60, 37, 647, 648, 37, 650, 133, 652,
+ 653, 69, 133, 138, 139, 658, 74, 75, 76, 77,
+ 78, 79, 3, 4, 134, 37, 88, 670, 86, 96,
+ 88, 28, 29, 30, 31, 32, 33, 34, 681, 54,
+ 134, 37, 6, 37, 16, 103, 53, 53, 37, 30,
+ 31, 109, 37, 16, 37, 37, 37, 38, 39, 37,
+ 37, 37, 4, 54, 37, 53, 37, 48, 49, 50,
+ 25, 37, 37, 15, 55, 135, 37, 37, 37, 60,
+ 138, 139, 135, 135, 135, 135, 4, 95, 69, 135,
+ 32, 135, 54, 74, 75, 76, 77, 78, 79, 41,
+ 42, 43, 44, 45, 25, 86, 135, 88, 135, 51,
+ 52, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 4, 135, 103, 4, 135, 135, 135, 522, 109, 216,
+ 4, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 37, 135, 123, 87, 189, 89, 135, 135,
+ 650, 93, 618, 635, 602, 97, 98, 138, 139, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 46, 47, 644, 687, 662, 605, 453, 490,
+ 521, 642, 56, 57, 58, 59, 128, 61, 62, 213,
+ 132, 90, 134, 392, 136, 514, 70, 71, 72, 73,
+ -1, 4, -1, -1, -1, -1, 80, 81, 82, 83,
+ 84, 85, -1, -1, -1, -1, 90, 91, 92, -1,
+ -1, -1, -1, 97, 98, -1, -1, -1, -1, -1,
+ -1, -1, -1, 36, -1, 109, -1, -1, -1, -1,
+ -1, -1, -1, 46, 47, -1, 120, -1, -1, -1,
+ -1, -1, 126, 56, 57, 58, 59, -1, 61, 62,
+ 134, -1, -1, -1, -1, -1, -1, 70, 71, 72,
+ 73, -1, -1, -1, -1, -1, -1, 80, 81, 82,
+ 83, 84, 85, -1, -1, -1, -1, 90, 91, 92,
+ -1, -1, -1, -1, 97, 98, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, -1, 109, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 120, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 15, 134, 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,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, -1, 133, 15,
+ 135, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 135, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 135, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 135, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 15,
+ 135, 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, 135,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, -1, -1, 15, 135,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 15, 135,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 15, 135,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 15, 135,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 15, 135,
+ 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, 135, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, -1, -1, -1, 15, 135, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, 135, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, 135, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, 135, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 15, 135, 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, 135, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, -1, -1, -1, -1, -1, 135, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 15, 133, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 15, 133, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 15, 133, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, -1, 133, 15, 4, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, -1, -1, 37, 4,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 38, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 36, 133, 38, 61, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 133, -1, -1, -1, 61, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 94, -1, -1,
+ -1, -1, 133, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, -1, 110, 111, 112, 113, 114, -1, 94,
+ -1, -1, 119, 120, 121, 100, 101, 102, 103, 104,
+ -1, 106, 107, 108, -1, 110, 111, 112, 113, 114,
+ -1, -1, -1, -1, 119, 120, 121, 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
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const unsigned char yystos[] =
+{
+ 0, 116, 117, 118, 127, 141, 155, 156, 145, 146,
+ 143, 144, 242, 243, 0, 157, 147, 4, 53, 122,
+ 246, 247, 4, 46, 47, 56, 57, 58, 59, 61,
+ 62, 70, 71, 72, 73, 80, 81, 82, 83, 84,
+ 85, 90, 91, 92, 97, 98, 109, 120, 134, 158,
+ 165, 167, 184, 186, 195, 196, 198, 200, 234, 244,
+ 245, 4, 38, 61, 94, 100, 101, 102, 103, 104,
+ 106, 107, 108, 110, 111, 112, 113, 114, 119, 120,
+ 121, 148, 6, 4, 120, 123, 124, 125, 249, 250,
+ 53, 247, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 182, 53, 53, 37, 37, 4, 142, 53, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 159, 37,
+ 37, 37, 168, 37, 133, 134, 183, 126, 4, 142,
+ 4, 3, 4, 30, 31, 37, 38, 39, 48, 49,
+ 50, 55, 60, 69, 74, 75, 76, 77, 78, 79,
+ 86, 88, 103, 109, 138, 139, 204, 4, 4, 152,
+ 4, 151, 150, 4, 4, 4, 204, 4, 3, 4,
+ 153, 4, 154, 4, 105, 204, 4, 16, 16, 54,
+ 134, 249, 202, 203, 202, 166, 235, 4, 4, 160,
+ 4, 188, 4, 142, 142, 4, 142, 135, 142, 197,
+ 199, 4, 201, 4, 5, 99, 161, 37, 142, 4,
+ 4, 37, 154, 53, 6, 133, 149, 6, 133, 204,
+ 204, 204, 37, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 37, 37, 37, 37, 204,
+ 204, 15, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 133, 6, 133, 204, 133, 133, 4, 133, 6, 133,
+ 204, 133, 133, 4, 133, 53, 124, 125, 250, 250,
+ 134, 4, 120, 123, 124, 125, 54, 204, 4, 54,
+ 68, 91, 167, 210, 4, 54, 236, 133, 135, 135,
+ 157, 189, 187, 135, 135, 135, 135, 135, 133, 135,
+ 185, 135, 185, 133, 201, 135, 37, 4, 5, 99,
+ 133, 135, 161, 135, 6, 6, 204, 135, 246, 204,
+ 204, 147, 204, 204, 135, 204, 204, 204, 204, 204,
+ 4, 4, 204, 4, 4, 4, 204, 204, 4, 4,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 4, 4, 4, 204, 204, 3,
+ 4, 4, 4, 252, 134, 134, 4, 122, 134, 248,
+ 211, 216, 221, 237, 4, 36, 37, 192, 54, 133,
+ 188, 142, 142, 201, 162, 37, 4, 5, 99, 135,
+ 202, 202, 133, 54, 36, 133, 135, 135, 133, 133,
+ 135, 133, 135, 135, 135, 135, 135, 133, 133, 135,
+ 135, 135, 133, 16, 250, 125, 53, 122, 134, 37,
+ 40, 204, 224, 225, 16, 204, 226, 225, 204, 239,
+ 133, 4, 138, 193, 194, 16, 188, 161, 164, 37,
+ 135, 135, 4, 204, 204, 204, 204, 204, 204, 4,
+ 204, 134, 253, 16, 251, 64, 65, 66, 67, 68,
+ 135, 223, 37, 37, 224, 16, 95, 206, 16, 85,
+ 227, 222, 4, 95, 240, 4, 4, 135, 194, 86,
+ 190, 135, 161, 163, 135, 135, 135, 135, 135, 135,
+ 135, 135, 54, 250, 250, 135, 204, 16, 37, 38,
+ 207, 206, 53, 37, 241, 37, 238, 135, 6, 185,
+ 135, 161, 134, 253, 135, 204, 37, 96, 208, 208,
+ 166, 204, 240, 204, 134, 202, 88, 191, 135, 54,
+ 39, 224, 135, 204, 37, 212, 217, 54, 135, 135,
+ 6, 37, 16, 135, 204, 129, 130, 131, 209, 53,
+ 240, 202, 204, 135, 53, 218, 135, 213, 230, 224,
+ 4, 15, 32, 41, 42, 43, 44, 45, 51, 52,
+ 87, 89, 93, 128, 132, 134, 136, 169, 170, 173,
+ 174, 176, 177, 178, 179, 184, 4, 54, 16, 37,
+ 37, 37, 37, 37, 4, 51, 170, 172, 37, 176,
+ 54, 37, 183, 231, 219, 51, 52, 93, 132, 169,
+ 51, 52, 169, 180, 202, 175, 169, 171, 37, 137,
+ 185, 172, 214, 202, 53, 25, 228, 37, 37, 135,
+ 37, 135, 37, 37, 135, 135, 4, 173, 135, 169,
+ 170, 135, 228, 135, 178, 4, 95, 205, 169, 169,
+ 171, 169, 169, 135, 169, 205, 54, 25, 229, 135,
+ 135, 135, 135, 135, 229, 232, 4, 6, 16, 181,
+ 135, 135, 169, 135, 135, 181, 229, 180, 4, 220,
+ 135, 215, 181, 185, 185, 233, 185
+};
+
+#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; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (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 (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 (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 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 (0)
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yysymprint (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (0)
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_stack_print (short int *bottom, short int *top)
+#else
+static void
+yy_stack_print (bottom, top)
+ short int *bottom;
+ short int *top;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (/* Nothing. */; 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 (0)
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yy_reduce_print (int yyrule)
+#else
+static void
+yy_reduce_print (yyrule)
+ int yyrule;
+#endif
+{
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
+ yyrule - 1, yylno);
+ /* Print the symbols being reduced, and their result. */
+ for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+ YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+ YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (Rule); \
+} while (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. */
+static YYSIZE_T
+# if defined (__STDC__) || defined (__cplusplus)
+yystrlen (const char *yystr)
+# else
+yystrlen (yystr)
+ const char *yystr;
+# endif
+{
+ const char *yys = yystr;
+
+ while (*yys++ != '\0')
+ continue;
+
+ return yys - yystr - 1;
+}
+# 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. */
+static char *
+# if defined (__STDC__) || defined (__cplusplus)
+yystpcpy (char *yydest, const char *yysrc)
+# else
+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 == '"')
+ {
+ size_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
+
+#endif /* YYERROR_VERBOSE */
+
+
+
+#if YYDEBUG
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yysymprint (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) yyvaluep;
+
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+ YYFPRINTF (yyoutput, ")");
+}
+
+#endif /* ! YYDEBUG */
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+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
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) 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 (__cplusplus)
+int yyparse (void *YYPARSE_PARAM)
+# else
+int yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+# endif
+#else /* ! YYPARSE_PARAM */
+#if defined (__STDC__) || defined (__cplusplus)
+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;
+
+ /* 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. */
+ short int yyssa[YYINITDEPTH];
+ short int *yyss = yyssa;
+ short int *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+ YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK (yyvsp--, yyssp--)
+
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+
+ /* When reducing, the number of symbols on the RHS of the reduced
+ rule. */
+ int yylen;
+
+ 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;
+ short int *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;
+
+ {
+ short int *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. */
+/* yyresume: */
+
+ /* 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;
+
+ /* Shift the look-ahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the token being shifted unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
+ *++yyvsp = yylval;
+
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ yystate = yyn;
+ 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 7:
+#line 173 "ldgram.y"
+ { ldlex_defsym(); }
+ break;
+
+ case 8:
+#line 175 "ldgram.y"
+ {
+ ldlex_popstate();
+ lang_add_assignment(exp_assop((yyvsp[-1].token),(yyvsp[-2].name),(yyvsp[0].etree)));
+ }
+ break;
+
+ case 9:
+#line 183 "ldgram.y"
+ {
+ ldlex_mri_script ();
+ PUSH_ERROR (_("MRI style script"));
+ }
+ break;
+
+ case 10:
+#line 188 "ldgram.y"
+ {
+ ldlex_popstate ();
+ mri_draw_tree ();
+ POP_ERROR ();
+ }
+ break;
+
+ case 15:
+#line 203 "ldgram.y"
+ {
+ einfo(_("%P%F: unrecognised keyword in MRI style script '%s'\n"),(yyvsp[0].name));
+ }
+ break;
+
+ case 16:
+#line 206 "ldgram.y"
+ {
+ config.map_filename = "-";
+ }
+ break;
+
+ case 19:
+#line 212 "ldgram.y"
+ { mri_public((yyvsp[-2].name), (yyvsp[0].etree)); }
+ break;
+
+ case 20:
+#line 214 "ldgram.y"
+ { mri_public((yyvsp[-2].name), (yyvsp[0].etree)); }
+ break;
+
+ case 21:
+#line 216 "ldgram.y"
+ { mri_public((yyvsp[-1].name), (yyvsp[0].etree)); }
+ break;
+
+ case 22:
+#line 218 "ldgram.y"
+ { mri_format((yyvsp[0].name)); }
+ break;
+
+ case 23:
+#line 220 "ldgram.y"
+ { mri_output_section((yyvsp[-2].name), (yyvsp[0].etree));}
+ break;
+
+ case 24:
+#line 222 "ldgram.y"
+ { mri_output_section((yyvsp[-1].name), (yyvsp[0].etree));}
+ break;
+
+ case 25:
+#line 224 "ldgram.y"
+ { mri_output_section((yyvsp[-2].name), (yyvsp[0].etree));}
+ break;
+
+ case 26:
+#line 226 "ldgram.y"
+ { mri_align((yyvsp[-2].name),(yyvsp[0].etree)); }
+ break;
+
+ case 27:
+#line 228 "ldgram.y"
+ { mri_align((yyvsp[-2].name),(yyvsp[0].etree)); }
+ break;
+
+ case 28:
+#line 230 "ldgram.y"
+ { mri_alignmod((yyvsp[-2].name),(yyvsp[0].etree)); }
+ break;
+
+ case 29:
+#line 232 "ldgram.y"
+ { mri_alignmod((yyvsp[-2].name),(yyvsp[0].etree)); }
+ break;
+
+ case 32:
+#line 236 "ldgram.y"
+ { mri_name((yyvsp[0].name)); }
+ break;
+
+ case 33:
+#line 238 "ldgram.y"
+ { mri_alias((yyvsp[-2].name),(yyvsp[0].name),0);}
+ break;
+
+ case 34:
+#line 240 "ldgram.y"
+ { mri_alias ((yyvsp[-2].name), 0, (int) (yyvsp[0].bigint).integer); }
+ break;
+
+ case 35:
+#line 242 "ldgram.y"
+ { mri_base((yyvsp[0].etree)); }
+ break;
+
+ case 36:
+#line 244 "ldgram.y"
+ { mri_truncate ((unsigned int) (yyvsp[0].bigint).integer); }
+ break;
+
+ case 39:
+#line 248 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[0].name)); }
+ break;
+
+ case 40:
+#line 250 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 41:
+#line 252 "ldgram.y"
+ { lang_add_entry ((yyvsp[0].name), FALSE); }
+ break;
+
+ case 43:
+#line 257 "ldgram.y"
+ { mri_order((yyvsp[0].name)); }
+ break;
+
+ case 44:
+#line 258 "ldgram.y"
+ { mri_order((yyvsp[0].name)); }
+ break;
+
+ case 46:
+#line 264 "ldgram.y"
+ { mri_load((yyvsp[0].name)); }
+ break;
+
+ case 47:
+#line 265 "ldgram.y"
+ { mri_load((yyvsp[0].name)); }
+ break;
+
+ case 48:
+#line 270 "ldgram.y"
+ { mri_only_load((yyvsp[0].name)); }
+ break;
+
+ case 49:
+#line 272 "ldgram.y"
+ { mri_only_load((yyvsp[0].name)); }
+ break;
+
+ case 50:
+#line 276 "ldgram.y"
+ { (yyval.name) = NULL; }
+ break;
+
+ case 53:
+#line 283 "ldgram.y"
+ { ldlang_add_undef ((yyvsp[0].name)); }
+ break;
+
+ case 54:
+#line 285 "ldgram.y"
+ { ldlang_add_undef ((yyvsp[0].name)); }
+ break;
+
+ case 55:
+#line 287 "ldgram.y"
+ { ldlang_add_undef ((yyvsp[0].name)); }
+ break;
+
+ case 56:
+#line 291 "ldgram.y"
+ {
+ ldlex_both();
+ }
+ break;
+
+ case 57:
+#line 295 "ldgram.y"
+ {
+ ldlex_popstate();
+ }
+ break;
+
+ case 70:
+#line 320 "ldgram.y"
+ { lang_add_target((yyvsp[-1].name)); }
+ break;
+
+ case 71:
+#line 322 "ldgram.y"
+ { ldfile_add_library_path ((yyvsp[-1].name), FALSE); }
+ break;
+
+ case 72:
+#line 324 "ldgram.y"
+ { lang_add_output((yyvsp[-1].name), 1); }
+ break;
+
+ case 73:
+#line 326 "ldgram.y"
+ { lang_add_output_format ((yyvsp[-1].name), (char *) NULL,
+ (char *) NULL, 1); }
+ break;
+
+ case 74:
+#line 329 "ldgram.y"
+ { lang_add_output_format ((yyvsp[-5].name), (yyvsp[-3].name), (yyvsp[-1].name), 1); }
+ break;
+
+ case 75:
+#line 331 "ldgram.y"
+ { ldfile_set_output_arch ((yyvsp[-1].name), bfd_arch_unknown); }
+ break;
+
+ case 76:
+#line 333 "ldgram.y"
+ { command_line.force_common_definition = TRUE ; }
+ break;
+
+ case 77:
+#line 335 "ldgram.y"
+ { command_line.inhibit_common_definition = TRUE ; }
+ break;
+
+ case 79:
+#line 338 "ldgram.y"
+ { lang_enter_group (); }
+ break;
+
+ case 80:
+#line 340 "ldgram.y"
+ { lang_leave_group (); }
+ break;
+
+ case 81:
+#line 342 "ldgram.y"
+ { lang_add_map((yyvsp[-1].name)); }
+ break;
+
+ case 82:
+#line 344 "ldgram.y"
+ { ldlex_script (); ldfile_open_command_file((yyvsp[0].name)); }
+ break;
+
+ case 83:
+#line 346 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 84:
+#line 348 "ldgram.y"
+ {
+ lang_add_nocrossref ((yyvsp[-1].nocrossref));
+ }
+ break;
+
+ case 86:
+#line 356 "ldgram.y"
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ break;
+
+ case 87:
+#line 359 "ldgram.y"
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ break;
+
+ case 88:
+#line 362 "ldgram.y"
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_search_file_enum,
+ (char *)NULL); }
+ break;
+
+ case 89:
+#line 365 "ldgram.y"
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+ break;
+
+ case 90:
+#line 368 "ldgram.y"
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+ break;
+
+ case 91:
+#line 371 "ldgram.y"
+ { lang_add_input_file((yyvsp[0].name),lang_input_file_is_l_enum,
+ (char *)NULL); }
+ break;
+
+ case 92:
+#line 374 "ldgram.y"
+ { (yyval.integer) = as_needed; as_needed = TRUE; }
+ break;
+
+ case 93:
+#line 376 "ldgram.y"
+ { as_needed = (yyvsp[-2].integer); }
+ break;
+
+ case 94:
+#line 378 "ldgram.y"
+ { (yyval.integer) = as_needed; as_needed = TRUE; }
+ break;
+
+ case 95:
+#line 380 "ldgram.y"
+ { as_needed = (yyvsp[-2].integer); }
+ break;
+
+ case 96:
+#line 382 "ldgram.y"
+ { (yyval.integer) = as_needed; as_needed = TRUE; }
+ break;
+
+ case 97:
+#line 384 "ldgram.y"
+ { as_needed = (yyvsp[-2].integer); }
+ break;
+
+ case 102:
+#line 399 "ldgram.y"
+ { lang_add_entry ((yyvsp[-1].name), FALSE); }
+ break;
+
+ case 104:
+#line 401 "ldgram.y"
+ {ldlex_expression ();}
+ break;
+
+ case 105:
+#line 402 "ldgram.y"
+ { ldlex_popstate ();
+ lang_add_assignment (exp_assert ((yyvsp[-3].etree), (yyvsp[-1].name))); }
+ break;
+
+ case 106:
+#line 410 "ldgram.y"
+ {
+ (yyval.cname) = (yyvsp[0].name);
+ }
+ break;
+
+ case 107:
+#line 414 "ldgram.y"
+ {
+ (yyval.cname) = "*";
+ }
+ break;
+
+ case 108:
+#line 418 "ldgram.y"
+ {
+ (yyval.cname) = "?";
+ }
+ break;
+
+ case 109:
+#line 425 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[0].cname);
+ (yyval.wildcard).sorted = none;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 110:
+#line 431 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[0].cname);
+ (yyval.wildcard).sorted = none;
+ (yyval.wildcard).exclude_name_list = (yyvsp[-2].name_list);
+ }
+ break;
+
+ case 111:
+#line 437 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[-1].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 112:
+#line 443 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[-1].cname);
+ (yyval.wildcard).sorted = by_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 113:
+#line 449 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[-2].cname);
+ (yyval.wildcard).sorted = by_name_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 114:
+#line 455 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[-2].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 115:
+#line 461 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[-2].cname);
+ (yyval.wildcard).sorted = by_alignment_name;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 116:
+#line 467 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[-2].cname);
+ (yyval.wildcard).sorted = by_alignment;
+ (yyval.wildcard).exclude_name_list = NULL;
+ }
+ break;
+
+ case 117:
+#line 473 "ldgram.y"
+ {
+ (yyval.wildcard).name = (yyvsp[-1].cname);
+ (yyval.wildcard).sorted = by_name;
+ (yyval.wildcard).exclude_name_list = (yyvsp[-3].name_list);
+ }
+ break;
+
+ case 118:
+#line 482 "ldgram.y"
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = (yyvsp[0].cname);
+ tmp->next = (yyvsp[-1].name_list);
+ (yyval.name_list) = tmp;
+ }
+ break;
+
+ case 119:
+#line 491 "ldgram.y"
+ {
+ struct name_list *tmp;
+ tmp = (struct name_list *) xmalloc (sizeof *tmp);
+ tmp->name = (yyvsp[0].cname);
+ tmp->next = NULL;
+ (yyval.name_list) = tmp;
+ }
+ break;
+
+ case 120:
+#line 502 "ldgram.y"
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = (yyvsp[-2].wildcard_list);
+ tmp->spec = (yyvsp[0].wildcard);
+ (yyval.wildcard_list) = tmp;
+ }
+ break;
+
+ case 121:
+#line 511 "ldgram.y"
+ {
+ struct wildcard_list *tmp;
+ tmp = (struct wildcard_list *) xmalloc (sizeof *tmp);
+ tmp->next = NULL;
+ tmp->spec = (yyvsp[0].wildcard);
+ (yyval.wildcard_list) = tmp;
+ }
+ break;
+
+ case 122:
+#line 522 "ldgram.y"
+ {
+ struct wildcard_spec tmp;
+ tmp.name = (yyvsp[0].name);
+ tmp.exclude_name_list = NULL;
+ tmp.sorted = none;
+ lang_add_wild (&tmp, NULL, ldgram_had_keep);
+ }
+ break;
+
+ case 123:
+#line 530 "ldgram.y"
+ {
+ lang_add_wild (NULL, (yyvsp[-1].wildcard_list), ldgram_had_keep);
+ }
+ break;
+
+ case 124:
+#line 534 "ldgram.y"
+ {
+ lang_add_wild (&(yyvsp[-3].wildcard), (yyvsp[-1].wildcard_list), ldgram_had_keep);
+ }
+ break;
+
+ case 126:
+#line 542 "ldgram.y"
+ { ldgram_had_keep = TRUE; }
+ break;
+
+ case 127:
+#line 544 "ldgram.y"
+ { ldgram_had_keep = FALSE; }
+ break;
+
+ case 129:
+#line 550 "ldgram.y"
+ {
+ lang_add_attribute(lang_object_symbols_statement_enum);
+ }
+ break;
+
+ case 131:
+#line 555 "ldgram.y"
+ {
+
+ lang_add_attribute(lang_constructors_statement_enum);
+ }
+ break;
+
+ case 132:
+#line 560 "ldgram.y"
+ {
+ constructors_sorted = TRUE;
+ lang_add_attribute (lang_constructors_statement_enum);
+ }
+ break;
+
+ case 134:
+#line 566 "ldgram.y"
+ {
+ lang_add_data ((int) (yyvsp[-3].integer), (yyvsp[-1].etree));
+ }
+ break;
+
+ case 135:
+#line 571 "ldgram.y"
+ {
+ lang_add_fill ((yyvsp[-1].fill));
+ }
+ break;
+
+ case 140:
+#line 588 "ldgram.y"
+ { (yyval.integer) = (yyvsp[0].token); }
+ break;
+
+ case 141:
+#line 590 "ldgram.y"
+ { (yyval.integer) = (yyvsp[0].token); }
+ break;
+
+ case 142:
+#line 592 "ldgram.y"
+ { (yyval.integer) = (yyvsp[0].token); }
+ break;
+
+ case 143:
+#line 594 "ldgram.y"
+ { (yyval.integer) = (yyvsp[0].token); }
+ break;
+
+ case 144:
+#line 596 "ldgram.y"
+ { (yyval.integer) = (yyvsp[0].token); }
+ break;
+
+ case 145:
+#line 601 "ldgram.y"
+ {
+ (yyval.fill) = exp_get_fill ((yyvsp[0].etree), 0, "fill value");
+ }
+ break;
+
+ case 146:
+#line 608 "ldgram.y"
+ { (yyval.fill) = (yyvsp[0].fill); }
+ break;
+
+ case 147:
+#line 609 "ldgram.y"
+ { (yyval.fill) = (fill_type *) 0; }
+ break;
+
+ case 148:
+#line 614 "ldgram.y"
+ { (yyval.token) = '+'; }
+ break;
+
+ case 149:
+#line 616 "ldgram.y"
+ { (yyval.token) = '-'; }
+ break;
+
+ case 150:
+#line 618 "ldgram.y"
+ { (yyval.token) = '*'; }
+ break;
+
+ case 151:
+#line 620 "ldgram.y"
+ { (yyval.token) = '/'; }
+ break;
+
+ case 152:
+#line 622 "ldgram.y"
+ { (yyval.token) = LSHIFT; }
+ break;
+
+ case 153:
+#line 624 "ldgram.y"
+ { (yyval.token) = RSHIFT; }
+ break;
+
+ case 154:
+#line 626 "ldgram.y"
+ { (yyval.token) = '&'; }
+ break;
+
+ case 155:
+#line 628 "ldgram.y"
+ { (yyval.token) = '|'; }
+ break;
+
+ case 158:
+#line 638 "ldgram.y"
+ {
+ lang_add_assignment (exp_assop ((yyvsp[-1].token), (yyvsp[-2].name), (yyvsp[0].etree)));
+ }
+ break;
+
+ case 159:
+#line 642 "ldgram.y"
+ {
+ lang_add_assignment (exp_assop ('=', (yyvsp[-2].name),
+ exp_binop ((yyvsp[-1].token),
+ exp_nameop (NAME,
+ (yyvsp[-2].name)),
+ (yyvsp[0].etree))));
+ }
+ break;
+
+ case 160:
+#line 650 "ldgram.y"
+ {
+ lang_add_assignment (exp_provide ((yyvsp[-3].name), (yyvsp[-1].etree), FALSE));
+ }
+ break;
+
+ case 161:
+#line 654 "ldgram.y"
+ {
+ lang_add_assignment (exp_provide ((yyvsp[-3].name), (yyvsp[-1].etree), TRUE));
+ }
+ break;
+
+ case 168:
+#line 676 "ldgram.y"
+ { region = lang_memory_region_lookup ((yyvsp[0].name), TRUE); }
+ break;
+
+ case 169:
+#line 679 "ldgram.y"
+ {}
+ break;
+
+ case 170:
+#line 684 "ldgram.y"
+ {
+ region->origin = exp_get_vma ((yyvsp[0].etree), 0, "origin");
+ region->current = region->origin;
+ }
+ break;
+
+ case 171:
+#line 692 "ldgram.y"
+ {
+ region->length = exp_get_vma ((yyvsp[0].etree), -1, "length");
+ }
+ break;
+
+ case 172:
+#line 699 "ldgram.y"
+ { /* dummy action to avoid bison 1.25 error message */ }
+ break;
+
+ case 176:
+#line 710 "ldgram.y"
+ { lang_set_flags (region, (yyvsp[0].name), 0); }
+ break;
+
+ case 177:
+#line 712 "ldgram.y"
+ { lang_set_flags (region, (yyvsp[0].name), 1); }
+ break;
+
+ case 178:
+#line 717 "ldgram.y"
+ { lang_startup((yyvsp[-1].name)); }
+ break;
+
+ case 180:
+#line 723 "ldgram.y"
+ { ldemul_hll((char *)NULL); }
+ break;
+
+ case 181:
+#line 728 "ldgram.y"
+ { ldemul_hll((yyvsp[0].name)); }
+ break;
+
+ case 182:
+#line 730 "ldgram.y"
+ { ldemul_hll((yyvsp[0].name)); }
+ break;
+
+ case 184:
+#line 738 "ldgram.y"
+ { ldemul_syslib((yyvsp[0].name)); }
+ break;
+
+ case 186:
+#line 744 "ldgram.y"
+ { lang_float(TRUE); }
+ break;
+
+ case 187:
+#line 746 "ldgram.y"
+ { lang_float(FALSE); }
+ break;
+
+ case 188:
+#line 751 "ldgram.y"
+ {
+ (yyval.nocrossref) = NULL;
+ }
+ break;
+
+ case 189:
+#line 755 "ldgram.y"
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = (yyvsp[-1].name);
+ n->next = (yyvsp[0].nocrossref);
+ (yyval.nocrossref) = n;
+ }
+ break;
+
+ case 190:
+#line 764 "ldgram.y"
+ {
+ struct lang_nocrossref *n;
+
+ n = (struct lang_nocrossref *) xmalloc (sizeof *n);
+ n->name = (yyvsp[-2].name);
+ n->next = (yyvsp[0].nocrossref);
+ (yyval.nocrossref) = n;
+ }
+ break;
+
+ case 191:
+#line 774 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 192:
+#line 776 "ldgram.y"
+ { ldlex_popstate (); (yyval.etree)=(yyvsp[0].etree);}
+ break;
+
+ case 193:
+#line 781 "ldgram.y"
+ { (yyval.etree) = exp_unop ('-', (yyvsp[0].etree)); }
+ break;
+
+ case 194:
+#line 783 "ldgram.y"
+ { (yyval.etree) = (yyvsp[-1].etree); }
+ break;
+
+ case 195:
+#line 785 "ldgram.y"
+ { (yyval.etree) = exp_unop ((int) (yyvsp[-3].integer),(yyvsp[-1].etree)); }
+ break;
+
+ case 196:
+#line 787 "ldgram.y"
+ { (yyval.etree) = exp_unop ('!', (yyvsp[0].etree)); }
+ break;
+
+ case 197:
+#line 789 "ldgram.y"
+ { (yyval.etree) = (yyvsp[0].etree); }
+ break;
+
+ case 198:
+#line 791 "ldgram.y"
+ { (yyval.etree) = exp_unop ('~', (yyvsp[0].etree));}
+ break;
+
+ case 199:
+#line 794 "ldgram.y"
+ { (yyval.etree) = exp_binop ('*', (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 200:
+#line 796 "ldgram.y"
+ { (yyval.etree) = exp_binop ('/', (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 201:
+#line 798 "ldgram.y"
+ { (yyval.etree) = exp_binop ('%', (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 202:
+#line 800 "ldgram.y"
+ { (yyval.etree) = exp_binop ('+', (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 203:
+#line 802 "ldgram.y"
+ { (yyval.etree) = exp_binop ('-' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 204:
+#line 804 "ldgram.y"
+ { (yyval.etree) = exp_binop (LSHIFT , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 205:
+#line 806 "ldgram.y"
+ { (yyval.etree) = exp_binop (RSHIFT , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 206:
+#line 808 "ldgram.y"
+ { (yyval.etree) = exp_binop (EQ , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 207:
+#line 810 "ldgram.y"
+ { (yyval.etree) = exp_binop (NE , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 208:
+#line 812 "ldgram.y"
+ { (yyval.etree) = exp_binop (LE , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 209:
+#line 814 "ldgram.y"
+ { (yyval.etree) = exp_binop (GE , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 210:
+#line 816 "ldgram.y"
+ { (yyval.etree) = exp_binop ('<' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 211:
+#line 818 "ldgram.y"
+ { (yyval.etree) = exp_binop ('>' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 212:
+#line 820 "ldgram.y"
+ { (yyval.etree) = exp_binop ('&' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 213:
+#line 822 "ldgram.y"
+ { (yyval.etree) = exp_binop ('^' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 214:
+#line 824 "ldgram.y"
+ { (yyval.etree) = exp_binop ('|' , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 215:
+#line 826 "ldgram.y"
+ { (yyval.etree) = exp_trinop ('?' , (yyvsp[-4].etree), (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 216:
+#line 828 "ldgram.y"
+ { (yyval.etree) = exp_binop (ANDAND , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 217:
+#line 830 "ldgram.y"
+ { (yyval.etree) = exp_binop (OROR , (yyvsp[-2].etree), (yyvsp[0].etree)); }
+ break;
+
+ case 218:
+#line 832 "ldgram.y"
+ { (yyval.etree) = exp_nameop (DEFINED, (yyvsp[-1].name)); }
+ break;
+
+ case 219:
+#line 834 "ldgram.y"
+ { (yyval.etree) = exp_bigintop ((yyvsp[0].bigint).integer, (yyvsp[0].bigint).str); }
+ break;
+
+ case 220:
+#line 836 "ldgram.y"
+ { (yyval.etree) = exp_nameop (SIZEOF_HEADERS,0); }
+ break;
+
+ case 221:
+#line 839 "ldgram.y"
+ { (yyval.etree) = exp_nameop (SIZEOF,(yyvsp[-1].name)); }
+ break;
+
+ case 222:
+#line 841 "ldgram.y"
+ { (yyval.etree) = exp_nameop (ADDR,(yyvsp[-1].name)); }
+ break;
+
+ case 223:
+#line 843 "ldgram.y"
+ { (yyval.etree) = exp_nameop (LOADADDR,(yyvsp[-1].name)); }
+ break;
+
+ case 224:
+#line 845 "ldgram.y"
+ { (yyval.etree) = exp_unop (ABSOLUTE, (yyvsp[-1].etree)); }
+ break;
+
+ case 225:
+#line 847 "ldgram.y"
+ { (yyval.etree) = exp_unop (ALIGN_K,(yyvsp[-1].etree)); }
+ break;
+
+ case 226:
+#line 849 "ldgram.y"
+ { (yyval.etree) = exp_binop (ALIGN_K,(yyvsp[-3].etree),(yyvsp[-1].etree)); }
+ break;
+
+ case 227:
+#line 851 "ldgram.y"
+ { (yyval.etree) = exp_binop (DATA_SEGMENT_ALIGN, (yyvsp[-3].etree), (yyvsp[-1].etree)); }
+ break;
+
+ case 228:
+#line 853 "ldgram.y"
+ { (yyval.etree) = exp_binop (DATA_SEGMENT_RELRO_END, (yyvsp[-1].etree), (yyvsp[-3].etree)); }
+ break;
+
+ case 229:
+#line 855 "ldgram.y"
+ { (yyval.etree) = exp_unop (DATA_SEGMENT_END, (yyvsp[-1].etree)); }
+ break;
+
+ case 230:
+#line 857 "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[-1].etree),
+ exp_nameop (NAME, (yyvsp[-3].name))); }
+ break;
+
+ case 231:
+#line 866 "ldgram.y"
+ { (yyval.etree) = exp_unop (ALIGN_K,(yyvsp[-1].etree)); }
+ break;
+
+ case 232:
+#line 868 "ldgram.y"
+ { (yyval.etree) = exp_nameop (NAME,(yyvsp[0].name)); }
+ break;
+
+ case 233:
+#line 870 "ldgram.y"
+ { (yyval.etree) = exp_binop (MAX_K, (yyvsp[-3].etree), (yyvsp[-1].etree) ); }
+ break;
+
+ case 234:
+#line 872 "ldgram.y"
+ { (yyval.etree) = exp_binop (MIN_K, (yyvsp[-3].etree), (yyvsp[-1].etree) ); }
+ break;
+
+ case 235:
+#line 874 "ldgram.y"
+ { (yyval.etree) = exp_assert ((yyvsp[-3].etree), (yyvsp[-1].name)); }
+ break;
+
+ case 236:
+#line 876 "ldgram.y"
+ { (yyval.etree) = exp_nameop (ORIGIN, (yyvsp[-1].name)); }
+ break;
+
+ case 237:
+#line 878 "ldgram.y"
+ { (yyval.etree) = exp_nameop (LENGTH, (yyvsp[-1].name)); }
+ break;
+
+ case 238:
+#line 883 "ldgram.y"
+ { (yyval.name) = (yyvsp[0].name); }
+ break;
+
+ case 239:
+#line 884 "ldgram.y"
+ { (yyval.name) = 0; }
+ break;
+
+ case 240:
+#line 888 "ldgram.y"
+ { (yyval.etree) = (yyvsp[-1].etree); }
+ break;
+
+ case 241:
+#line 889 "ldgram.y"
+ { (yyval.etree) = 0; }
+ break;
+
+ case 242:
+#line 893 "ldgram.y"
+ { (yyval.etree) = (yyvsp[-1].etree); }
+ break;
+
+ case 243:
+#line 894 "ldgram.y"
+ { (yyval.etree) = 0; }
+ break;
+
+ case 244:
+#line 898 "ldgram.y"
+ { (yyval.etree) = (yyvsp[-1].etree); }
+ break;
+
+ case 245:
+#line 899 "ldgram.y"
+ { (yyval.etree) = 0; }
+ break;
+
+ case 246:
+#line 903 "ldgram.y"
+ { (yyval.token) = ONLY_IF_RO; }
+ break;
+
+ case 247:
+#line 904 "ldgram.y"
+ { (yyval.token) = ONLY_IF_RW; }
+ break;
+
+ case 248:
+#line 905 "ldgram.y"
+ { (yyval.token) = SPECIAL; }
+ break;
+
+ case 249:
+#line 906 "ldgram.y"
+ { (yyval.token) = 0; }
+ break;
+
+ case 250:
+#line 909 "ldgram.y"
+ { ldlex_expression(); }
+ break;
+
+ case 251:
+#line 913 "ldgram.y"
+ { ldlex_popstate (); ldlex_script (); }
+ break;
+
+ case 252:
+#line 916 "ldgram.y"
+ {
+ lang_enter_output_section_statement((yyvsp[-8].name), (yyvsp[-6].etree),
+ sectype,
+ (yyvsp[-4].etree), (yyvsp[-3].etree), (yyvsp[-5].etree), (yyvsp[-1].token));
+ }
+ break;
+
+ case 253:
+#line 922 "ldgram.y"
+ { ldlex_popstate (); ldlex_expression (); }
+ break;
+
+ case 254:
+#line 924 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_leave_output_section_statement ((yyvsp[0].fill), (yyvsp[-3].name), (yyvsp[-1].section_phdr), (yyvsp[-2].name));
+ }
+ break;
+
+ case 255:
+#line 929 "ldgram.y"
+ {}
+ break;
+
+ case 256:
+#line 931 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 257:
+#line 933 "ldgram.y"
+ { ldlex_popstate (); ldlex_script (); }
+ break;
+
+ case 258:
+#line 935 "ldgram.y"
+ {
+ lang_enter_overlay ((yyvsp[-5].etree), (yyvsp[-2].etree));
+ }
+ break;
+
+ case 259:
+#line 940 "ldgram.y"
+ { ldlex_popstate (); ldlex_expression (); }
+ break;
+
+ case 260:
+#line 942 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_leave_overlay ((yyvsp[-11].etree), (int) (yyvsp[-12].integer),
+ (yyvsp[0].fill), (yyvsp[-3].name), (yyvsp[-1].section_phdr), (yyvsp[-2].name));
+ }
+ break;
+
+ case 262:
+#line 952 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 263:
+#line 954 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_add_assignment (exp_assop ('=', ".", (yyvsp[0].etree)));
+ }
+ break;
+
+ case 265:
+#line 962 "ldgram.y"
+ { sectype = noload_section; }
+ break;
+
+ case 266:
+#line 963 "ldgram.y"
+ { sectype = dsect_section; }
+ break;
+
+ case 267:
+#line 964 "ldgram.y"
+ { sectype = copy_section; }
+ break;
+
+ case 268:
+#line 965 "ldgram.y"
+ { sectype = info_section; }
+ break;
+
+ case 269:
+#line 966 "ldgram.y"
+ { sectype = overlay_section; }
+ break;
+
+ case 271:
+#line 971 "ldgram.y"
+ { sectype = normal_section; }
+ break;
+
+ case 272:
+#line 972 "ldgram.y"
+ { sectype = normal_section; }
+ break;
+
+ case 273:
+#line 976 "ldgram.y"
+ { (yyval.etree) = (yyvsp[-2].etree); }
+ break;
+
+ case 274:
+#line 977 "ldgram.y"
+ { (yyval.etree) = (etree_type *)NULL; }
+ break;
+
+ case 275:
+#line 982 "ldgram.y"
+ { (yyval.etree) = (yyvsp[-3].etree); }
+ break;
+
+ case 276:
+#line 984 "ldgram.y"
+ { (yyval.etree) = (yyvsp[-7].etree); }
+ break;
+
+ case 277:
+#line 988 "ldgram.y"
+ { (yyval.etree) = (yyvsp[-1].etree); }
+ break;
+
+ case 278:
+#line 989 "ldgram.y"
+ { (yyval.etree) = (etree_type *) NULL; }
+ break;
+
+ case 279:
+#line 994 "ldgram.y"
+ { (yyval.integer) = 0; }
+ break;
+
+ case 280:
+#line 996 "ldgram.y"
+ { (yyval.integer) = 1; }
+ break;
+
+ case 281:
+#line 1001 "ldgram.y"
+ { (yyval.name) = (yyvsp[0].name); }
+ break;
+
+ case 282:
+#line 1002 "ldgram.y"
+ { (yyval.name) = DEFAULT_MEMORY_REGION; }
+ break;
+
+ case 283:
+#line 1007 "ldgram.y"
+ {
+ (yyval.section_phdr) = NULL;
+ }
+ break;
+
+ case 284:
+#line 1011 "ldgram.y"
+ {
+ struct lang_output_section_phdr_list *n;
+
+ n = ((struct lang_output_section_phdr_list *)
+ xmalloc (sizeof *n));
+ n->name = (yyvsp[0].name);
+ n->used = FALSE;
+ n->next = (yyvsp[-2].section_phdr);
+ (yyval.section_phdr) = n;
+ }
+ break;
+
+ case 286:
+#line 1027 "ldgram.y"
+ {
+ ldlex_script ();
+ lang_enter_overlay_section ((yyvsp[0].name));
+ }
+ break;
+
+ case 287:
+#line 1032 "ldgram.y"
+ { ldlex_popstate (); ldlex_expression (); }
+ break;
+
+ case 288:
+#line 1034 "ldgram.y"
+ {
+ ldlex_popstate ();
+ lang_leave_overlay_section ((yyvsp[0].fill), (yyvsp[-1].section_phdr));
+ }
+ break;
+
+ case 293:
+#line 1051 "ldgram.y"
+ { ldlex_expression (); }
+ break;
+
+ case 294:
+#line 1052 "ldgram.y"
+ { ldlex_popstate (); }
+ break;
+
+ case 295:
+#line 1054 "ldgram.y"
+ {
+ lang_new_phdr ((yyvsp[-5].name), (yyvsp[-3].etree), (yyvsp[-2].phdr).filehdr, (yyvsp[-2].phdr).phdrs, (yyvsp[-2].phdr).at,
+ (yyvsp[-2].phdr).flags);
+ }
+ break;
+
+ case 296:
+#line 1062 "ldgram.y"
+ {
+ (yyval.etree) = (yyvsp[0].etree);
+
+ if ((yyvsp[0].etree)->type.node_class == etree_name
+ && (yyvsp[0].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[0].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 297:
+#line 1106 "ldgram.y"
+ {
+ memset (&(yyval.phdr), 0, sizeof (struct phdr_info));
+ }
+ break;
+
+ case 298:
+#line 1110 "ldgram.y"
+ {
+ (yyval.phdr) = (yyvsp[0].phdr);
+ if (strcmp ((yyvsp[-2].name), "FILEHDR") == 0 && (yyvsp[-1].etree) == NULL)
+ (yyval.phdr).filehdr = TRUE;
+ else if (strcmp ((yyvsp[-2].name), "PHDRS") == 0 && (yyvsp[-1].etree) == NULL)
+ (yyval.phdr).phdrs = TRUE;
+ else if (strcmp ((yyvsp[-2].name), "FLAGS") == 0 && (yyvsp[-1].etree) != NULL)
+ (yyval.phdr).flags = (yyvsp[-1].etree);
+ else
+ einfo (_("%X%P:%S: PHDRS syntax error at `%s'\n"), (yyvsp[-2].name));
+ }
+ break;
+
+ case 299:
+#line 1122 "ldgram.y"
+ {
+ (yyval.phdr) = (yyvsp[0].phdr);
+ (yyval.phdr).at = (yyvsp[-2].etree);
+ }
+ break;
+
+ case 300:
+#line 1130 "ldgram.y"
+ {
+ (yyval.etree) = NULL;
+ }
+ break;
+
+ case 301:
+#line 1134 "ldgram.y"
+ {
+ (yyval.etree) = (yyvsp[-1].etree);
+ }
+ break;
+
+ case 302:
+#line 1142 "ldgram.y"
+ {
+ ldlex_version_file ();
+ PUSH_ERROR (_("VERSION script"));
+ }
+ break;
+
+ case 303:
+#line 1147 "ldgram.y"
+ {
+ ldlex_popstate ();
+ POP_ERROR ();
+ }
+ break;
+
+ case 304:
+#line 1156 "ldgram.y"
+ {
+ ldlex_version_script ();
+ }
+ break;
+
+ case 305:
+#line 1160 "ldgram.y"
+ {
+ ldlex_popstate ();
+ }
+ break;
+
+ case 308:
+#line 1172 "ldgram.y"
+ {
+ lang_register_vers_node (NULL, (yyvsp[-2].versnode), NULL);
+ }
+ break;
+
+ case 309:
+#line 1176 "ldgram.y"
+ {
+ lang_register_vers_node ((yyvsp[-4].name), (yyvsp[-2].versnode), NULL);
+ }
+ break;
+
+ case 310:
+#line 1180 "ldgram.y"
+ {
+ lang_register_vers_node ((yyvsp[-5].name), (yyvsp[-3].versnode), (yyvsp[-1].deflist));
+ }
+ break;
+
+ case 311:
+#line 1187 "ldgram.y"
+ {
+ (yyval.deflist) = lang_add_vers_depend (NULL, (yyvsp[0].name));
+ }
+ break;
+
+ case 312:
+#line 1191 "ldgram.y"
+ {
+ (yyval.deflist) = lang_add_vers_depend ((yyvsp[-1].deflist), (yyvsp[0].name));
+ }
+ break;
+
+ case 313:
+#line 1198 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node (NULL, NULL);
+ }
+ break;
+
+ case 314:
+#line 1202 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[-1].versyms), NULL);
+ }
+ break;
+
+ case 315:
+#line 1206 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[-1].versyms), NULL);
+ }
+ break;
+
+ case 316:
+#line 1210 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node (NULL, (yyvsp[-1].versyms));
+ }
+ break;
+
+ case 317:
+#line 1214 "ldgram.y"
+ {
+ (yyval.versnode) = lang_new_vers_node ((yyvsp[-5].versyms), (yyvsp[-1].versyms));
+ }
+ break;
+
+ case 318:
+#line 1221 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, (yyvsp[0].name), ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 319:
+#line 1225 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, (yyvsp[0].name), ldgram_vers_current_lang, TRUE);
+ }
+ break;
+
+ case 320:
+#line 1229 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), (yyvsp[0].name), ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 321:
+#line 1233 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), (yyvsp[0].name), ldgram_vers_current_lang, TRUE);
+ }
+ break;
+
+ case 322:
+#line 1237 "ldgram.y"
+ {
+ (yyval.name) = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = (yyvsp[-1].name);
+ }
+ break;
+
+ case 323:
+#line 1242 "ldgram.y"
+ {
+ struct bfd_elf_version_expr *pat;
+ for (pat = (yyvsp[-2].versyms); pat->next != NULL; pat = pat->next);
+ pat->next = (yyvsp[-8].versyms);
+ (yyval.versyms) = (yyvsp[-2].versyms);
+ ldgram_vers_current_lang = (yyvsp[-3].name);
+ }
+ break;
+
+ case 324:
+#line 1250 "ldgram.y"
+ {
+ (yyval.name) = ldgram_vers_current_lang;
+ ldgram_vers_current_lang = (yyvsp[-1].name);
+ }
+ break;
+
+ case 325:
+#line 1255 "ldgram.y"
+ {
+ (yyval.versyms) = (yyvsp[-2].versyms);
+ ldgram_vers_current_lang = (yyvsp[-3].name);
+ }
+ break;
+
+ case 326:
+#line 1260 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "global", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 327:
+#line 1264 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), "global", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 328:
+#line 1268 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "local", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 329:
+#line 1272 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), "local", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 330:
+#line 1276 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern (NULL, "extern", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+ case 331:
+#line 1280 "ldgram.y"
+ {
+ (yyval.versyms) = lang_new_vers_pattern ((yyvsp[-2].versyms), "extern", ldgram_vers_current_lang, FALSE);
+ }
+ break;
+
+
+ default: break;
+ }
+
+/* Line 1126 of yacc.c. */
+#line 3882 "ldgram.c"
+
+ yyvsp -= yylen;
+ yyssp -= yylen;
+
+
+ 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
+ yyn = yypact[yystate];
+
+ if (YYPACT_NINF < yyn && yyn < YYLAST)
+ {
+ int yytype = YYTRANSLATE (yychar);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ int yysize_overflow = 0;
+ char *yymsg = 0;
+# define 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;
+ 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 && yysize <= YYSTACK_ALLOC_MAXIMUM)
+ yymsg = (char *) YYSTACK_ALLOC (yysize);
+ if (yymsg)
+ {
+ /* 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 = yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyf))
+ {
+ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyf += 2;
+ }
+ else
+ {
+ yyp++;
+ yyf++;
+ }
+ }
+ yyerror (yymsg);
+ YYSTACK_FREE (yymsg);
+ }
+ else
+ {
+ yyerror (YY_("syntax error"));
+ goto yyexhaustedlab;
+ }
+ }
+ else
+#endif /* YYERROR_VERBOSE */
+ yyerror (YY_("syntax error"));
+ }
+
+
+
+ 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 (0)
+ goto yyerrorlab;
+
+yyvsp -= yylen;
+ yyssp -= yylen;
+ 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;
+ 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);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK;
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+ return yyresult;
+}
+
+
+#line 1290 "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.17/ld/ldgram.h b/binutils-2.17/ld/ldgram.h
new file mode 100644
index 00000000..438e1071
--- /dev/null
+++ b/binutils-2.17/ld/ldgram.h
@@ -0,0 +1,307 @@
+/* A Bison parser, made by GNU Bison 2.1. */
+
+/* Skeleton parser for Yacc-like parsing with Bison,
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 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, when this file is copied by Bison into a
+ Bison output file, you may use that output file without restriction.
+ This special exception was added by the Free Software Foundation
+ in version 1.24 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,
+ DATA_SEGMENT_ALIGN = 289,
+ DATA_SEGMENT_RELRO_END = 290,
+ DATA_SEGMENT_END = 291,
+ SORT_BY_NAME = 292,
+ SORT_BY_ALIGNMENT = 293,
+ SIZEOF_HEADERS = 294,
+ OUTPUT_FORMAT = 295,
+ FORCE_COMMON_ALLOCATION = 296,
+ OUTPUT_ARCH = 297,
+ INHIBIT_COMMON_ALLOCATION = 298,
+ SEGMENT_START = 299,
+ INCLUDE = 300,
+ MEMORY = 301,
+ DEFSYMEND = 302,
+ NOLOAD = 303,
+ DSECT = 304,
+ COPY = 305,
+ INFO = 306,
+ OVERLAY = 307,
+ DEFINED = 308,
+ TARGET_K = 309,
+ SEARCH_DIR = 310,
+ MAP = 311,
+ ENTRY = 312,
+ NEXT = 313,
+ SIZEOF = 314,
+ ADDR = 315,
+ LOADADDR = 316,
+ MAX_K = 317,
+ MIN_K = 318,
+ STARTUP = 319,
+ HLL = 320,
+ SYSLIB = 321,
+ FLOAT = 322,
+ NOFLOAT = 323,
+ NOCROSSREFS = 324,
+ ORIGIN = 325,
+ FILL = 326,
+ LENGTH = 327,
+ CREATE_OBJECT_SYMBOLS = 328,
+ INPUT = 329,
+ GROUP = 330,
+ OUTPUT = 331,
+ CONSTRUCTORS = 332,
+ ALIGNMOD = 333,
+ AT = 334,
+ SUBALIGN = 335,
+ PROVIDE = 336,
+ PROVIDE_HIDDEN = 337,
+ AS_NEEDED = 338,
+ CHIP = 339,
+ LIST = 340,
+ SECT = 341,
+ ABSOLUTE = 342,
+ LOAD = 343,
+ NEWLINE = 344,
+ ENDWORD = 345,
+ ORDER = 346,
+ NAMEWORD = 347,
+ ASSERT_K = 348,
+ FORMAT = 349,
+ PUBLIC = 350,
+ BASE = 351,
+ ALIAS = 352,
+ TRUNCATE = 353,
+ REL = 354,
+ INPUT_SCRIPT = 355,
+ INPUT_MRI_SCRIPT = 356,
+ INPUT_DEFSYM = 357,
+ CASE = 358,
+ EXTERN = 359,
+ START = 360,
+ VERS_TAG = 361,
+ VERS_IDENTIFIER = 362,
+ GLOBAL = 363,
+ LOCAL = 364,
+ VERSIONK = 365,
+ INPUT_VERSION_SCRIPT = 366,
+ KEEP = 367,
+ ONLY_IF_RO = 368,
+ ONLY_IF_RW = 369,
+ SPECIAL = 370,
+ EXCLUDE_FILE = 371
+ };
+#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 DATA_SEGMENT_ALIGN 289
+#define DATA_SEGMENT_RELRO_END 290
+#define DATA_SEGMENT_END 291
+#define SORT_BY_NAME 292
+#define SORT_BY_ALIGNMENT 293
+#define SIZEOF_HEADERS 294
+#define OUTPUT_FORMAT 295
+#define FORCE_COMMON_ALLOCATION 296
+#define OUTPUT_ARCH 297
+#define INHIBIT_COMMON_ALLOCATION 298
+#define SEGMENT_START 299
+#define INCLUDE 300
+#define MEMORY 301
+#define DEFSYMEND 302
+#define NOLOAD 303
+#define DSECT 304
+#define COPY 305
+#define INFO 306
+#define OVERLAY 307
+#define DEFINED 308
+#define TARGET_K 309
+#define SEARCH_DIR 310
+#define MAP 311
+#define ENTRY 312
+#define NEXT 313
+#define SIZEOF 314
+#define ADDR 315
+#define LOADADDR 316
+#define MAX_K 317
+#define MIN_K 318
+#define STARTUP 319
+#define HLL 320
+#define SYSLIB 321
+#define FLOAT 322
+#define NOFLOAT 323
+#define NOCROSSREFS 324
+#define ORIGIN 325
+#define FILL 326
+#define LENGTH 327
+#define CREATE_OBJECT_SYMBOLS 328
+#define INPUT 329
+#define GROUP 330
+#define OUTPUT 331
+#define CONSTRUCTORS 332
+#define ALIGNMOD 333
+#define AT 334
+#define SUBALIGN 335
+#define PROVIDE 336
+#define PROVIDE_HIDDEN 337
+#define AS_NEEDED 338
+#define CHIP 339
+#define LIST 340
+#define SECT 341
+#define ABSOLUTE 342
+#define LOAD 343
+#define NEWLINE 344
+#define ENDWORD 345
+#define ORDER 346
+#define NAMEWORD 347
+#define ASSERT_K 348
+#define FORMAT 349
+#define PUBLIC 350
+#define BASE 351
+#define ALIAS 352
+#define TRUNCATE 353
+#define REL 354
+#define INPUT_SCRIPT 355
+#define INPUT_MRI_SCRIPT 356
+#define INPUT_DEFSYM 357
+#define CASE 358
+#define EXTERN 359
+#define START 360
+#define VERS_TAG 361
+#define VERS_IDENTIFIER 362
+#define GLOBAL 363
+#define LOCAL 364
+#define VERSIONK 365
+#define INPUT_VERSION_SCRIPT 366
+#define KEEP 367
+#define ONLY_IF_RO 368
+#define ONLY_IF_RW 369
+#define SPECIAL 370
+#define EXCLUDE_FILE 371
+
+
+
+
+#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+#line 65 "ldgram.y"
+typedef union YYSTYPE {
+ 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;
+} YYSTYPE;
+/* Line 1447 of yacc.c. */
+#line 299 "ldgram.h"
+# 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.17/ld/ldgram.y b/binutils-2.17/ld/ldgram.y
new file mode 100644
index 00000000..3829e6ae
--- /dev/null
+++ b/binutils-2.17/ld/ldgram.y
@@ -0,0 +1,1302 @@
+/* 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 Free Software Foundation, Inc.
+ Written by Steve Chamberlain of Cygnus Support (steve@cygnus.com).
+
+ This file is part of GNU ld.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+%{
+/*
+
+ */
+
+#define DONTDECLARE_MALLOC
+
+#include "bfd.h"
+#include "sysdep.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;
+
+FILE *saved_script_handle = NULL;
+bfd_boolean force_make_executable = FALSE;
+
+bfd_boolean ldgram_in_script = FALSE;
+bfd_boolean ldgram_had_equals = FALSE;
+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 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 SIZEOF_HEADERS
+%token SEGMENT_START
+%token INCLUDE
+%token MEMORY DEFSYMEND
+%token NOLOAD DSECT COPY INFO OVERLAY
+%token NAME LNAME DEFINED TARGET_K SEARCH_DIR MAP ENTRY
+%token <integer> NEXT
+%token SIZEOF 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
+%type <versyms> vers_defns
+%type <versnode> vers_tag
+%type <deflist> verdep
+
+%%
+
+file:
+ INPUT_SCRIPT script_file
+ | INPUT_MRI_SCRIPT mri_script_file
+ | INPUT_VERSION_SCRIPT version_script_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
+ ;
+
+extern_name_list:
+ NAME
+ { ldlang_add_undef ($1); }
+ | extern_name_list NAME
+ { ldlang_add_undef ($2); }
+ | extern_name_list ',' NAME
+ { ldlang_add_undef ($3); }
+ ;
+
+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 ')'
+ ;
+
+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>$ = as_needed; as_needed = TRUE; }
+ input_list ')'
+ { as_needed = $<integer>3; }
+ | input_list ',' AS_NEEDED '('
+ { $<integer>$ = as_needed; as_needed = TRUE; }
+ input_list ')'
+ { as_needed = $<integer>5; }
+ | input_list AS_NEEDED '('
+ { $<integer>$ = as_needed; as_needed = TRUE; }
+ input_list ')'
+ { as_needed = $<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);
+ }
+ ;
+
+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 memory_spec_list '}'
+ ;
+
+memory_spec_list:
+ memory_spec_list memory_spec
+ | memory_spec_list ',' memory_spec
+ |
+ ;
+
+
+memory_spec: NAME
+ { region = lang_memory_region_lookup ($1, TRUE); }
+ attributes_opt ':'
+ origin_spec opt_comma length_spec
+ {}
+ ;
+
+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); }
+
+ | SIZEOF '(' NAME ')'
+ { $$ = exp_nameop (SIZEOF,$3); }
+ | ADDR '(' NAME ')'
+ { $$ = exp_nameop (ADDR,$3); }
+ | LOADADDR '(' NAME ')'
+ { $$ = exp_nameop (LOADADDR,$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 '}'
+ ;
+
+type:
+ NOLOAD { sectype = noload_section; }
+ | DSECT { sectype = dsect_section; }
+ | COPY { sectype = copy_section; }
+ | INFO { sectype = info_section; }
+ | OVERLAY { sectype = overlay_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;
+ }
+ ;
+
+/* 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.17/ld/ldint.texinfo b/binutils-2.17/ld/ldint.texinfo
new file mode 100644
index 00000000..dc6e9a65
--- /dev/null
+++ b/binutils-2.17/ld/ldint.texinfo
@@ -0,0 +1,1058 @@
+\input texinfo
+@setfilename ldint.info
+@c Copyright 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003
+@c Free Software Foundation, Inc.
+
+@ifinfo
+@format
+START-INFO-DIR-ENTRY
+* Ld-Internals: (ldint). The GNU linker internals.
+END-INFO-DIR-ENTRY
+@end format
+@end ifinfo
+
+@ifinfo
+This file documents the internals of the GNU linker ld.
+
+Copyright 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+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.1
+ 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".
+
+@ignore
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+@end ifinfo
+
+@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, 93, 94, 95, 96, 97, 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.1
+ 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{scriptteml/@var{script}.sc}.
+
+@item TEMPLATE_NAME
+This is the name of the @file{emultemlp} 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 NONPAGED_TEXT_START_ADDR
+If this is defined, the @file{genscripts.sh} script sets
+@code{TEXT_START_ADDR} to its value before running the
+@file{scripttempl} script for the @code{-n} and @code{-N} options
+(@pxref{linker scripts}).
+
+@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 8 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{emulparms} 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}.
+@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 someting 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
+parellel 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
+
+ GNU Free Documentation License
+
+ Version 1.1, March 2000
+
+ Copyright (C) 2000 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially. Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work that contains a
+notice placed by the copyright holder saying it can be distributed
+under the terms of this License. The "Document", below, refers to any
+such manual or work. Any member of the public is a licensee, and is
+addressed as "you".
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (For example, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, whose contents can be viewed and edited directly and
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup has been designed to thwart or discourage
+subsequent modification by readers is not Transparent. A copy that is
+not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML designed for human modification. Opaque formats include
+PostScript, PDF, proprietary formats that can be read and edited only
+by proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML produced by some word processors for output
+purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies of the Document numbering more than 100,
+and the Document's license notice requires Cover Texts, you must enclose
+the copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a publicly-accessible computer-network location containing a complete
+Transparent copy of the Document, free of added material, which the
+general network-using public has access to download anonymously at no
+charge using public-standard network protocols. If you use the latter
+option, you must take reasonably prudent steps, when you begin
+distribution of Opaque copies in quantity, to ensure that this
+Transparent copy will remain thus accessible at the stated location
+until at least one year after the last time you distribute an Opaque
+copy (directly or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section entitled "History", and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+K. In any section entitled "Acknowledgements" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+M. Delete any section entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section as "Endorsements"
+ or to conflict in title with any Invariant Section.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications". You must delete all sections
+entitled "Endorsements."
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, does not as a whole count as a Modified Version
+of the Document, provided no compilation copyright is claimed for the
+compilation. Such a compilation is called an "aggregate", and this
+License does not apply to the other self-contained works thus compiled
+with the Document, on account of their being thus compiled, if they
+are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one quarter
+of the entire aggregate, the Document's Cover Texts may be placed on
+covers that surround only the Document within the aggregate.
+Otherwise they must appear on covers around the whole aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License provided that you also include the
+original English version of this License. In case of a disagreement
+between the translation and the original English version of this
+License, the original English version will prevail.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+@end smallexample
+
+If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant. If you have no
+Front-Cover Texts, write "no Front-Cover Texts" instead of
+"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@contents
+@bye
diff --git a/binutils-2.17/ld/ldlang.c b/binutils-2.17/ld/ldlang.c
new file mode 100644
index 00000000..8764a70c
--- /dev/null
+++ b/binutils-2.17/ld/ldlang.c
@@ -0,0 +1,6775 @@
+/* Linker command language support.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+#include "bfd.h"
+#include "sysdep.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"
+
+#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 lang_statement_list_type input_file_chain;
+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 const char *output_target;
+static lang_statement_list_type statement_list;
+static struct lang_phdr *lang_phdr_list;
+static struct bfd_hash_table lang_definedness_table;
+
+/* 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 bfd_boolean load_symbols (lang_input_statement_type *,
+ lang_statement_list_type *);
+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 void print_all_symbols (asection *);
+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 *);
+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);
+
+/* Exported variables. */
+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 };
+struct bfd_sym_chain entry_symbol = { NULL, NULL };
+static const char *entry_symbol_default = "start";
+const char *entry_section = ".text";
+bfd_boolean entry_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_nocrossrefs *nocrossref_list;
+static struct unique_sections *unique_section_list;
+static bfd_boolean ldlang_sysrooted_script = 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);
+}
+
+bfd_boolean
+unique_section_p (const asection *sec)
+{
+ struct unique_sections *unam;
+ const char *secnam;
+
+ if (link_info.relocatable
+ && sec->owner != NULL
+ && bfd_is_group_section (sec->owner, sec))
+ return TRUE;
+
+ secnam = sec->name;
+ for (unam = unique_section_list; unam; unam = unam->next)
+ if (wildcardp (unam->name)
+ ? fnmatch (unam->name, secnam, 0) == 0
+ : strcmp (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)
+{
+ bfd_boolean skip = FALSE;
+ 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)
+ {
+ bfd_boolean is_wildcard = wildcardp (list_tmp->name);
+ if (is_wildcard)
+ skip = fnmatch (list_tmp->name, file->filename, 0) == 0;
+ else
+ skip = strcmp (list_tmp->name, file->filename) == 0;
+
+ /* If this file is part of an archive, and the archive is
+ excluded, exclude this file. */
+ if (! skip && file->the_bfd != NULL
+ && file->the_bfd->my_archive != NULL
+ && file->the_bfd->my_archive->filename != NULL)
+ {
+ if (is_wildcard)
+ skip = fnmatch (list_tmp->name,
+ file->the_bfd->my_archive->filename,
+ 0) == 0;
+ else
+ skip = strcmp (list_tmp->name,
+ file->the_bfd->my_archive->filename) == 0;
+ }
+
+ if (skip)
+ break;
+ }
+
+ if (!skip)
+ (*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);
+
+ if (wildcardp (sec->spec.name))
+ skip = fnmatch (sec->spec.name, sname, 0) != 0;
+ else
+ skip = strcmp (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 *bfd ATTRIBUTE_UNUSED, asection *s, void *data)
+{
+ section_iterator_callback_data *d = 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;
+}
+
+/* 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;
+
+ /* 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, 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;
+
+ 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 (wildcardp (file_spec))
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ if (fnmatch (file_spec, f->filename, FNM_FILE_NAME) == 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. */
+
+static 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:
+ 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:
+ 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;
+}
+
+/* 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;
+
+ new = stat_alloc (size);
+ new->header.type = type;
+ new->header.next = NULL;
+ lang_statement_append (list, new, &new->header.next);
+ return new;
+}
+
+/* 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 = new_stat (lang_input_statement, stat_ptr);
+ else
+ {
+ p = 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;
+ 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, 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->asymbols = NULL;
+ p->next_real_file = NULL;
+ p->next = NULL;
+ p->symbol_count = 0;
+ p->dynamic = config.dynamic_link;
+ p->add_needed = add_needed;
+ p->as_needed = as_needed;
+ p->whole_archive = whole_archive;
+ p->loaded = 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)
+{
+ lang_has_input_file = TRUE;
+ 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 = 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);
+
+ 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. */
+
+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_type *p;
+ lang_memory_region_type *new;
+
+ /* NAME is NULL for LMA memspecs if no region was specified. */
+ if (name == NULL)
+ return NULL;
+
+ for (p = lang_memory_region_list; p != NULL; p = p->next)
+ if (strcmp (p->name, name) == 0)
+ {
+ if (create)
+ einfo (_("%P:%S: warning: redeclaration of memory region '%s'\n"),
+ name);
+ return p;
+ }
+
+ if (!create && strcmp (name, DEFAULT_MEMORY_REGION))
+ einfo (_("%P:%S: warning: memory region %s not declared\n"), name);
+
+ new = stat_alloc (sizeof (lang_memory_region_type));
+
+ new->name = xstrdup (name);
+ new->next = NULL;
+
+ *lang_memory_region_list_tail = new;
+ lang_memory_region_list_tail = &new->next;
+ new->origin = 0;
+ new->flags = 0;
+ new->not_flags = 0;
+ new->length = ~(bfd_size_type) 0;
+ new->current = 0;
+ new->had_full_message = FALSE;
+
+ return new;
+}
+
+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);
+}
+
+lang_output_section_statement_type *
+lang_output_section_find (const char *const name)
+{
+ struct out_section_hash_entry *entry;
+ unsigned long hash;
+
+ entry = ((struct out_section_hash_entry *)
+ bfd_hash_lookup (&output_section_statement_table, name,
+ FALSE, FALSE));
+ if (entry == NULL)
+ return NULL;
+
+ hash = entry->root.hash;
+ do
+ {
+ if (entry->s.output_section_statement.constraint != -1)
+ return &entry->s.output_section_statement;
+ entry = (struct out_section_hash_entry *) entry->root.next;
+ }
+ while (entry != NULL
+ && entry->root.hash == hash
+ && strcmp (name, entry->s.output_section_statement.name) == 0);
+
+ return NULL;
+}
+
+static lang_output_section_statement_type *
+lang_output_section_statement_lookup_1 (const char *const name, int constraint)
+{
+ struct out_section_hash_entry *entry;
+ struct out_section_hash_entry *last_ent;
+ unsigned long hash;
+
+ entry = ((struct out_section_hash_entry *)
+ bfd_hash_lookup (&output_section_statement_table, name,
+ TRUE, FALSE));
+ if (entry == NULL)
+ {
+ 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. */
+ hash = entry->root.hash;
+ do
+ {
+ if (entry->s.output_section_statement.constraint != -1
+ && (constraint == 0
+ || (constraint == entry->s.output_section_statement.constraint
+ && constraint != SPECIAL)))
+ return &entry->s.output_section_statement;
+ last_ent = entry;
+ entry = (struct out_section_hash_entry *) entry->root.next;
+ }
+ while (entry != NULL
+ && entry->root.hash == hash
+ && strcmp (name, entry->s.output_section_statement.name) == 0);
+
+ 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;
+}
+
+lang_output_section_statement_type *
+lang_output_section_statement_lookup (const char *const name)
+{
+ return lang_output_section_statement_lookup_1 (name, 0);
+}
+
+/* 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 (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)
+ {
+ /* 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 (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))
+ {
+ /* .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 (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)
+ {
+ /* .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 (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)
+ {
+ /* .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 (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
+ {
+ /* .bss goes last. */
+ 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 (output_bfd, look->bfd_section,
+ sec->owner, sec))
+ continue;
+ }
+ flags ^= sec->flags;
+ if (!(flags & SEC_ALLOC))
+ found = look;
+ }
+ }
+
+ 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 == -1)
+ continue;
+
+ if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
+ return lookup->bfd_section;
+ }
+
+ return NULL;
+}
+
+lang_output_section_statement_type *
+lang_insert_orphan (asection *s,
+ const char *secname,
+ lang_output_section_statement_type *after,
+ struct orphan_save *place,
+ etree_type *address,
+ lang_statement_list_type *add_child)
+{
+ lang_statement_list_type *old;
+ lang_statement_list_type add;
+ const char *ps;
+ etree_type *load_base;
+ lang_output_section_statement_type *os;
+ lang_output_section_statement_type **os_tail;
+
+ /* Start building a list of statements for this section.
+ First save the current statement pointer. */
+ old = stat_ptr;
+
+ /* 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)
+ {
+ stat_ptr = &add;
+ lang_list_init (stat_ptr);
+ }
+
+ ps = NULL;
+ if (config.build_constructors)
+ {
+ /* 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 (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_assop ('=', symname,
+ exp_nameop (NAME, ".")));
+ }
+ }
+
+ if (link_info.relocatable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
+ address = exp_intop (0);
+
+ load_base = NULL;
+ if (after != NULL && after->load_base != NULL)
+ {
+ etree_type *lma_from_vma;
+ lma_from_vma = exp_binop ('-', after->load_base,
+ exp_nameop (ADDR, after->name));
+ load_base = exp_binop ('+', lma_from_vma,
+ exp_nameop (ADDR, secname));
+ }
+
+ os_tail = ((lang_output_section_statement_type **)
+ lang_output_section_statement.tail);
+ os = lang_enter_output_section_statement (secname, address, 0, NULL, NULL,
+ load_base, 0);
+
+ if (add_child == NULL)
+ add_child = &os->children;
+ lang_add_section (add_child, s, os);
+
+ lang_leave_output_section_statement (0, "*default*", NULL, NULL);
+
+ if (config.build_constructors && *ps == '\0')
+ {
+ char *symname;
+
+ /* lang_leave_ouput_section_statement resets stat_ptr.
+ Put stat_ptr back where we want it. */
+ if (after != NULL)
+ stat_ptr = &add;
+
+ symname = (char *) xmalloc (ps - secname + sizeof "__stop_" + 1);
+ symname[0] = bfd_get_symbol_leading_char (output_bfd);
+ sprintf (symname + (symname[0] != 0), "__stop_%s", secname);
+ lang_add_assignment (exp_assop ('=', symname,
+ exp_nameop (NAME, ".")));
+ }
+
+ /* Restore the global list pointer. */
+ if (after != NULL)
+ stat_ptr = old;
+
+ 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 = &output_bfd->sections;
+
+ as = *place->section;
+
+ if (!as)
+ {
+ /* Put the section at the end of the list. */
+
+ /* Unlink the section. */
+ bfd_section_list_remove (output_bfd, snew);
+
+ /* Now tack it back on in the right place. */
+ bfd_section_list_append (output_bfd, snew);
+ }
+ else if (as != snew && as->prev != snew)
+ {
+ /* Unlink the section. */
+ bfd_section_list_remove (output_bfd, snew);
+
+ /* Now tack it back on in the right place. */
+ bfd_section_list_insert_before (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;
+ lang_statement_union_type **assign = NULL;
+ bfd_boolean ignore_first;
+
+ /* Look for a suitable place for the new statement list.
+ 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. An exception to this rule is made for
+ the first assignment to dot, otherwise we might put an
+ orphan before . = . + SIZEOF_HEADERS or similar
+ assignments that set the initial address. */
+
+ 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)
+ where = assign;
+ 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_afile_asection_pair_statement_enum:
+ break;
+ }
+ break;
+ }
+
+ *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 (*old->tail == add.head)
+ old->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 != output_bfd)
+ {
+ if (! dis_header_printed)
+ {
+ fprintf (config.map_file, _("\nDiscarded input sections\n\n"));
+ dis_header_printed = TRUE;
+ }
+
+ print_input_section (s);
+ }
+ }
+
+ 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);
+
+ 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 (! command_line.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);
+ }
+ print_statements ();
+}
+
+static void
+init_map_userdata (abfd, sec, data)
+ 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;
+}
+
+static bfd_boolean
+sort_def_symbol (hash_entry, info)
+ 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 = 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 = 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 = obstack_alloc (&map_obstack, sizeof *def);
+ def->entry = hash_entry;
+ *(ud->map_symbol_def_tail) = def;
+ ud->map_symbol_def_tail = &def->next;
+ }
+ return TRUE;
+}
+
+/* Initialize an output section. */
+
+static void
+init_os (lang_output_section_statement_type *s, asection *isec)
+{
+ if (s->bfd_section != NULL)
+ return;
+
+ if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
+ einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
+
+ s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
+ if (s->bfd_section == NULL)
+ s->bfd_section = bfd_make_section (output_bfd, s->name);
+ if (s->bfd_section == NULL)
+ {
+ einfo (_("%P%F: output format %s cannot represent section called %s\n"),
+ output_bfd->xvec->name, s->name);
+ }
+ s->bfd_section->output_section = s->bfd_section;
+ s->bfd_section->output_offset = 0;
+ if (!command_line.reduce_memory_overheads)
+ {
+ fat_section_userdata_type *new
+ = stat_alloc (sizeof (fat_section_userdata_type));
+ memset (new, 0, sizeof (fat_section_userdata_type));
+ get_userdata (s->bfd_section) = new;
+ }
+
+
+ /* 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;
+
+ if (isec)
+ bfd_init_private_section_data (isec->owner, isec,
+ output_bfd, s->bfd_section,
+ &link_info);
+}
+
+/* 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, NULL);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void
+section_already_linked (bfd *abfd, asection *sec, void *data)
+{
+ lang_input_statement_type *entry = 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);
+}
+
+/* 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;
+
+ /* 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)
+ {
+ bfd_boolean first;
+ lang_input_section_type *new;
+ flagword flags;
+
+ if (output->bfd_section == NULL)
+ init_os (output, section);
+
+ first = ! output->bfd_section->linker_has_input;
+ output->bfd_section->linker_has_input = 1;
+
+ 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 = new_stat (lang_input_section, ptr);
+
+ new->section = section;
+ section->output_section = output->bfd_section;
+
+ flags = section->flags;
+
+ /* 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);
+
+ /* If this is not the first input section, and the SEC_READONLY
+ flag is not currently set, then don't set it just because the
+ input section has it set. */
+
+ if (! first && (output->bfd_section->flags & SEC_READONLY) == 0)
+ flags &= ~ SEC_READONLY;
+
+ /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
+ if (! first
+ && ((output->bfd_section->flags & (SEC_MERGE | SEC_STRINGS))
+ != (flags & (SEC_MERGE | SEC_STRINGS))
+ || ((flags & SEC_MERGE)
+ && 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 (flags & SEC_MERGE)
+ output->bfd_section->entsize = section->entsize;
+
+ /* If SEC_READONLY is not set in the input section, then clear
+ it from the output section. */
+ if ((section->flags & SEC_READONLY) == 0)
+ output->bfd_section->flags &= ~SEC_READONLY;
+
+ switch (output->sectype)
+ {
+ case normal_section:
+ break;
+ case dsect_section:
+ case copy_section:
+ case info_section:
+ case overlay_section:
+ output->bfd_section->flags &= ~SEC_ALLOC;
+ break;
+ case noload_section:
+ output->bfd_section->flags &= ~SEC_LOAD;
+ output->bfd_section->flags |= SEC_NEVER_LOAD;
+ break;
+ }
+
+ /* Copy over SEC_SMALL_DATA. */
+ if (section->flags & SEC_SMALL_DATA)
+ output->bfd_section->flags |= SEC_SMALL_DATA;
+
+ if (section->alignment_power > output->bfd_section->alignment_power)
+ output->bfd_section->alignment_power = section->alignment_power;
+
+ if (bfd_get_arch (section->owner) == bfd_arch_tic54x
+ && (section->flags & SEC_TIC54X_BLOCK) != 0)
+ {
+ output->bfd_section->flags |= SEC_TIC54X_BLOCK;
+ /* FIXME: This value should really be obtained from the bfd... */
+ output->block_value = 128;
+ }
+ }
+}
+
+/* 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;
+}
+
+/* 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)
+{
+ const char *section_name;
+ lang_statement_union_type *l;
+
+ if (!wild->filenames_sorted
+ && (sec == NULL || sec->spec.sorted == none))
+ return NULL;
+
+ section_name = bfd_get_section_name (file->the_bfd, section);
+ 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;
+
+ /* Exclude sections that match UNIQUE_SECTION_LIST. */
+ if (unique_section_p (section))
+ 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,
+ (lang_output_section_statement_type *) output);
+ else
+ {
+ lang_statement_list_type list;
+ lang_statement_union_type **pp;
+
+ lang_list_init (&list);
+ lang_add_section (&list, section,
+ (lang_output_section_statement_type *) output);
+
+ /* 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 *data)
+{
+ /* Exclude sections that match UNIQUE_SECTION_LIST. */
+ if (unique_section_p (section))
+ return;
+
+ if (section->output_section == NULL && (section->flags & SEC_READONLY) == 0)
+ ((lang_output_section_statement_type *) data)->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 && name == NULL)
+ return search;
+ if (filename != NULL
+ && name != 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
+ (FIXME: can that ever actually happen?) or the name is NULL
+ (FIXME: can that ever actually happen?) don't add this file. */
+ if (search->loaded
+ || ! search->real
+ || search->filename == NULL)
+ 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 = xmalloc (sizeof (*entry));
+ entry->next = excluded_libs;
+ entry->name = 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. */
+
+static 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);
+
+ if (! bfd_check_format (entry->the_bfd, bfd_archive)
+ && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
+ {
+ bfd_error_type err;
+ lang_statement_list_type *hold;
+ bfd_boolean bad_load = TRUE;
+ bfd_boolean save_ldlang_sysrooted_script;
+ bfd_boolean save_as_needed, save_add_needed;
+
+ 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);
+ else
+ bad_load = FALSE;
+
+ bfd_close (entry->the_bfd);
+ entry->the_bfd = NULL;
+
+ /* Try to interpret the file as a linker script. */
+ ldfile_open_command_file (entry->filename);
+
+ hold = stat_ptr;
+ stat_ptr = place;
+ save_ldlang_sysrooted_script = ldlang_sysrooted_script;
+ ldlang_sysrooted_script = entry->sysrooted;
+ save_as_needed = as_needed;
+ as_needed = entry->as_needed;
+ save_add_needed = add_needed;
+ add_needed = entry->add_needed;
+
+ 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;
+ as_needed = save_as_needed;
+ add_needed = save_add_needed;
+ stat_ptr = hold;
+
+ return ! bad_load;
+ }
+
+ 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 (;;)
+ {
+ 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;
+ }
+
+ if (! ((*link_info.callbacks->add_archive_element)
+ (&link_info, member, "--whole-archive")))
+ abort ();
+
+ if (! bfd_link_add_symbols (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;
+
+ walk_wild (s, output_section_callback, output);
+
+ for (sec = s->section_list; sec != NULL; sec = sec->next)
+ {
+ if (default_common_section != NULL)
+ break;
+ 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;
+ }
+ }
+}
+
+/* Return TRUE iff target is the sought target. */
+
+static int
+get_target (const bfd_target *target, void *data)
+{
+ const char *sought = 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 = xmalloc (strlen (first) + 1);
+ copy2 = 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 = 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;
+
+ /* 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 bfd *
+open_output (const char *name)
+{
+ bfd *output;
+
+ 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;
+ }
+ }
+ }
+ }
+
+ output = bfd_openw (name, output_target);
+
+ if (output == 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 (output, bfd_object))
+ einfo (_("%P%F:%s: can not make object file: %E\n"), name);
+ if (! bfd_set_arch_mach (output,
+ 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 (output);
+ if (link_info.hash == NULL)
+ einfo (_("%P%F: can not create hash table: %E\n"));
+
+ bfd_set_gp_size (output, g_switch_value);
+ return output;
+}
+
+static void
+ldlang_open_output (lang_statement_union_type *statement)
+{
+ switch (statement->header.type)
+ {
+ case lang_output_statement_enum:
+ ASSERT (output_bfd == NULL);
+ output_bfd = open_output (statement->output_statement.name);
+ ldemul_set_output_arch ();
+ if (config.magic_demand_paged && !link_info.relocatable)
+ output_bfd->flags |= D_PAGED;
+ else
+ output_bfd->flags &= ~D_PAGED;
+ if (config.text_read_only)
+ output_bfd->flags |= WP_TEXT;
+ else
+ output_bfd->flags &= ~WP_TEXT;
+ if (link_info.traditional_format)
+ output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
+ else
+ 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))
+ 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_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;
+
+ lang_list_init (&add);
+
+ if (! load_symbols (&s->input_statement, &add))
+ config.make_executable = FALSE;
+
+ if (add.head != NULL)
+ {
+ *add.tail = s->header.next;
+ s->header.next = add.head;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+/* 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)
+{
+ ldlang_undef_chain_list_type *new =
+ stat_alloc (sizeof (ldlang_undef_chain_list_type));
+
+ new->next = ldlang_undef_chain_list_head;
+ ldlang_undef_chain_list_head = new;
+
+ new->name = xstrdup (name);
+
+ if (output_bfd != NULL)
+ insert_undefined (new->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);
+}
+
+/* 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;
+ if (sec != NULL)
+ {
+ 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)
+ {
+ 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:
+ if (s->output_section_statement.constraint)
+ {
+ if (s->output_section_statement.constraint != ONLY_IF_RW
+ && s->output_section_statement.constraint != ONLY_IF_RO)
+ break;
+ s->output_section_statement.all_input_readonly = TRUE;
+ check_input_sections (s->output_section_statement.children.head,
+ &s->output_section_statement);
+ if ((s->output_section_statement.all_input_readonly
+ && s->output_section_statement.constraint == ONLY_IF_RW)
+ || (!s->output_section_statement.all_input_readonly
+ && s->output_section_statement.constraint == ONLY_IF_RO))
+ {
+ s->output_section_statement.constraint = -1;
+ break;
+ }
+ }
+
+ map_input_to_output_sections (s->output_section_statement.children.head,
+ target,
+ &s->output_section_statement);
+ 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);
+ if (os != NULL && os->bfd_section == NULL)
+ init_os (os, NULL);
+ /* The output section gets contents, and then we inspect for
+ any flags set in the input script which override any ALLOC. */
+ os->bfd_section->flags |= SEC_HAS_CONTENTS;
+ if (!(os->flags & SEC_NEVER_LOAD))
+ os->bfd_section->flags |= SEC_ALLOC | SEC_LOAD;
+ break;
+ case lang_fill_statement_enum:
+ case lang_input_section_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, NULL);
+ break;
+ case lang_assignment_statement_enum:
+ if (os != NULL && os->bfd_section == NULL)
+ init_os (os, NULL);
+
+ /* Make sure that any sections mentioned in the assignment
+ are initialized. */
+ exp_init_os (s->assignment_statement.exp);
+ break;
+ case lang_afile_asection_pair_statement_enum:
+ FAIL ();
+ 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)
+ {
+ lang_output_section_statement_type *aos
+ = (lang_output_section_statement_lookup
+ (s->address_statement.section_name));
+
+ if (aos->bfd_section == NULL)
+ init_os (aos, NULL);
+ aos->addr_tree = s->address_statement.address;
+ }
+ 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 == -1)
+ 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 (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. */
+ os->ignored = TRUE;
+ output_section->flags |= SEC_EXCLUDE;
+ bfd_section_list_remove (output_bfd, output_section);
+ 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 (output_section_statement->load_base != NULL)
+ {
+ bfd_vma addr;
+
+ addr = exp_get_abs_int (output_section_statement->load_base, 0,
+ "load base");
+ minfo (_(" load address 0x%V"), addr);
+ }
+ }
+
+ 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;
+
+ 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);
+ }
+
+ exp_fold_tree (tree, output_section->bfd_section, &print_dot);
+ if (expld.result.valid_p)
+ {
+ bfd_vma value;
+
+ if (computation_is_valid)
+ {
+ value = expld.result.value;
+
+ if (expld.result.section)
+ 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)
+ 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)
+ {
+ 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 = 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 void
+print_all_symbols (sec)
+ asection *sec;
+{
+ struct fat_user_section_struct *ud = get_userdata (sec);
+ struct map_symbol_def *def;
+
+ if (!ud)
+ return;
+
+ *ud->map_symbol_def_tail = 0;
+ for (def = ud->map_symbol_def_head; def; def = def->next)
+ print_one_symbol (def->entry, sec);
+}
+
+/* Print information about an input section to the map file. */
+
+static void
+print_input_section (asection *i)
+{
+ bfd_size_type size = i->size;
+
+ init_opb ();
+
+ {
+ int len;
+ bfd_vma addr;
+
+ 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 == output_bfd)
+ addr = i->output_section->vma + i->output_offset;
+ else
+ {
+ addr = print_dot;
+ 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 == output_bfd)
+ {
+ if (command_line.reduce_memory_overheads)
+ bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
+ else
+ print_all_symbols (i);
+
+ 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);
+ 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_afile_asection_pair_statement_enum:
+ FAIL ();
+ 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 = 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;
+
+ return 0;
+}
+
+#define IGNORE_SECTION(s) \
+ ((s->flags & SEC_NEVER_LOAD) != 0 \
+ || (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. */
+
+static void
+lang_check_section_addresses (void)
+{
+ asection *s, *os;
+ asection **sections, **spp;
+ unsigned int count;
+ bfd_vma s_start;
+ bfd_vma s_end;
+ bfd_vma os_start;
+ bfd_vma os_end;
+ bfd_size_type amt;
+
+ if (bfd_count_sections (output_bfd) <= 1)
+ return;
+
+ amt = bfd_count_sections (output_bfd) * sizeof (asection *);
+ sections = xmalloc (amt);
+
+ /* Scan all sections in the output list. */
+ count = 0;
+ for (s = output_bfd->sections; s != NULL; s = s->next)
+ {
+ /* Only consider loadable sections with real contents. */
+ if (IGNORE_SECTION (s) || 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 = bfd_section_lma (output_bfd, s);
+ 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. */
+ os = s;
+ os_start = s_start;
+ os_end = s_end;
+ s = *spp++;
+ s_start = bfd_section_lma (output_bfd, s);
+ s_end = s_start + TO_ADDR (s->size) - 1;
+
+ /* Look for an overlap. */
+ if (s_end >= os_start && s_start <= os_end)
+ einfo (_("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
+ s->name, s_start, s_end, os->name, os_start, os_end);
+ }
+
+ free (sections);
+}
+
+/* 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 base)
+{
+ if ((region->current < region->origin
+ || (region->current - region->origin > region->length))
+ && ((region->current != region->origin + region->length)
+ || base == 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);
+ }
+ else
+ {
+ einfo (_("%X%P: region %s is full (%B section %s)\n"),
+ region->name,
+ os->bfd_section->owner,
+ os->bfd_section->name);
+ }
+ /* Reset the region pointer. */
+ region->current = region->origin;
+ }
+}
+
+/* Set the sizes for all the output sections. */
+
+static bfd_vma
+lang_size_sections_1
+ (lang_statement_union_type *s,
+ lang_output_section_statement_type *output_section_statement,
+ lang_statement_union_type **prev,
+ fill_type *fill,
+ bfd_vma dot,
+ bfd_boolean *relax,
+ bfd_boolean check_regions)
+{
+ /* Size up the sections from their constituent parts. */
+ for (; 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;
+
+ os = &s->output_section_statement;
+ if (os->addr_tree != NULL)
+ {
+ os->processed = FALSE;
+ exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
+
+ if (!expld.result.valid_p
+ && expld.phase != lang_mark_phase_enum)
+ einfo (_("%F%S: non constant or forward reference"
+ " address expression for section %s\n"),
+ os->name);
+
+ dot = expld.result.value + expld.result.section->vma;
+ }
+
+ 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 (output_bfd) == bfd_target_ecoff_flavour
+ || bfd_get_flavour (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[0] == '*'
+ && strcmp (os->region->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 (!IGNORE_SECTION (os->bfd_section)
+ && ! link_info.relocatable
+ && check_regions
+ && strcmp (os->region->name,
+ DEFAULT_MEMORY_REGION) == 0
+ && lang_memory_region_list != NULL
+ && (strcmp (lang_memory_region_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 (output_bfd,
+ os->bfd_section));
+ else
+ einfo (_("%P: warning: no memory region specified"
+ " for loadable section `%s'\n"),
+ bfd_get_section_name (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->children.head,
+ os->fill, newdot, relax, check_regions);
+
+ os->processed = TRUE;
+
+ if (bfd_is_abs_section (os->bfd_section) || os->ignored)
+ {
+ ASSERT (os->bfd_section->size == 0);
+ break;
+ }
+
+ 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);
+
+ /* .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 the SEC_NEVER_LOAD bit is not set, it will affect the
+ addresses of sections after it. We have to update
+ dot. */
+ if (os->region != NULL
+ && ((os->bfd_section->flags & SEC_NEVER_LOAD) == 0
+ || (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 there's no load address specified, use the run
+ region as the load region. */
+ if (os->lma_region == NULL && os->load_base == NULL)
+ os->lma_region = os->region;
+
+ if (os->lma_region != NULL && os->lma_region != os->region)
+ {
+ /* Set load_base, which will be handled later. */
+ os->load_base = exp_intop (os->lma_region->current);
+ os->lma_region->current +=
+ 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,
+ &s->wild_statement.children.head,
+ 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,
+ &s->wild_statement.children.head,
+ 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 = (*prev)->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;
+
+ exp_fold_tree (s->assignment_statement.exp,
+ output_section_statement->bfd_section,
+ &newdot);
+
+ if (newdot != dot && !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
+ {
+ /* 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 never be loaded. */
+ if (!(output_section_statement->flags
+ & (SEC_NEVER_LOAD | SEC_ALLOC)))
+ 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,
+ &s->group_statement.children.head,
+ fill, dot, relax, check_regions);
+ break;
+
+ default:
+ FAIL ();
+ break;
+
+ /* We can only get here when relaxing is turned on. */
+ case lang_address_statement_enum:
+ break;
+ }
+ prev = &s->header.next;
+ }
+ return dot;
+}
+
+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,
+ &statement_list.head, 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 old_min_base, relro_end, maxpage;
+
+ expld.dataseg.phase = exp_dataseg_relro_adjust;
+ old_min_base = expld.dataseg.min_base;
+ maxpage = expld.dataseg.maxpagesize;
+ 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 (old_min_base + maxpage < expld.dataseg.base)
+ {
+ expld.dataseg.base -= maxpage;
+ relro_end -= maxpage;
+ }
+ 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 some other base. */
+ 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 = 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_min_base)
+ expld.dataseg.base += expld.dataseg.pagesize;
+ expld.dataseg.base -= (1 << max_alignment_power);
+ 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;
+ 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 *output_section_statement,
+ 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,
+ output_section_statement,
+ 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->load_base)
+ {
+ /* If nothing has been placed into the output section then
+ it won't have a bfd_section. */
+ if (os->bfd_section && !os->ignored)
+ {
+ os->bfd_section->lma
+ = exp_get_abs_int (os->load_base, 0, "load base");
+ }
+ }
+ }
+ break;
+
+ case lang_wild_statement_enum:
+
+ dot = lang_do_assignments_1 (s->wild_statement.children.head,
+ output_section_statement,
+ 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
+ + 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,
+ output_section_statement->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,
+ output_section_statement,
+ fill, dot);
+ break;
+
+ default:
+ FAIL ();
+ break;
+
+ case lang_address_statement_enum:
+ 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 = output_bfd->sections; s != NULL; s = s->next)
+ {
+ const char *secname;
+ char *buf;
+ struct bfd_link_hash_entry *h;
+
+ secname = bfd_get_section_name (output_bfd, s);
+ buf = 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 (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.shared)
+ warn = FALSE;
+ else
+ warn = TRUE;
+
+ 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 (output_bfd,
+ h->u.def.section->output_section)
+ + h->u.def.section->output_offset);
+ if (! bfd_set_start_address (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 (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 (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 (output_bfd, ts));
+ if (! bfd_set_start_address (output_bfd,
+ bfd_get_section_vma (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, 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 (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 (output_bfd), output_bfd);
+ /* einfo with %F exits. */
+ }
+
+ if (compatible == NULL)
+ {
+ if (command_line.warn_mismatch)
+ einfo (_("%P: warning: %s architecture of input file `%B'"
+ " is incompatible with %s output\n"),
+ bfd_printable_name (input_bfd), input_bfd,
+ bfd_printable_name (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, 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 size. */
+
+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
+ {
+ int power;
+
+ for (power = 4; power >= 0; power--)
+ 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
+ && power_of_two < (unsigned int) *(int *) info)
+ return TRUE;
+
+ section = h->u.c.p->section;
+
+ /* Increase the size of the section to align the common sym. */
+ section->size += ((bfd_vma) 1 << (power_of_two + opb_shift)) - 1;
+ section->size &= (- (bfd_vma) 1 << (power_of_two + opb_shift));
+
+ /* Adjust the alignment if necessary. */
+ if (power_of_two > section->alignment_power)
+ section->alignment_power = power_of_two;
+
+ /* Change the symbol from common to defined. */
+ h->type = bfd_link_hash_defined;
+ h->u.def.section = section;
+ h->u.def.value = section->size;
+
+ /* Increase the size of the section. */
+ section->size += size;
+
+ /* Make sure the section is allocated in memory, and make sure that
+ it is no longer a common section. */
+ section->flags |= SEC_ALLOC;
+ section->flags &= ~SEC_IS_COMMON;
+
+ 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 = demangle (h->root.string);
+ 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");
+
+ }
+ lang_add_section (&default_common_section->children, s,
+ default_common_section);
+ }
+ }
+ else if (ldemul_place_orphan (s))
+ ;
+ else
+ {
+ lang_output_section_statement_type *os;
+
+ os = lang_output_section_statement_lookup (s->name);
+ 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)
+{
+ bfd **pp;
+
+ 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 != output_bfd);
+ for (pp = &link_info.input_bfds; *pp != NULL; pp = &(*pp)->link_next)
+ ;
+ *pp = entry->the_bfd;
+ 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_1 (output_section_statement_name,
+ constraint);
+ current_section = os;
+
+ /* Make next things chain into subchain of this. */
+
+ 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;
+ 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;
+
+ new = new_stat (lang_output_statement, stat_ptr);
+ new->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->old_length = (bfd_size_type) (p->current - p->origin);
+ p->current = p->origin;
+ }
+
+ for (os = &lang_output_section_statement.head->output_section_statement;
+ os != NULL;
+ os = os->next)
+ os->processed = FALSE;
+
+ for (o = 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)
+{
+ struct bfd_link_hash_entry *h;
+ ldlang_undef_chain_list_type *ulist;
+
+ /* Keep all sections so marked in the link script. */
+
+ lang_gc_sections_1 (statement_list.head);
+
+ /* Keep all sections containing symbols undefined on the command-line,
+ and the section containing the entry symbol. */
+
+ for (ulist = link_info.gc_sym_list; ulist; ulist = ulist->next)
+ {
+ h = bfd_link_hash_lookup (link_info.hash, ulist->name,
+ FALSE, FALSE, FALSE);
+
+ if (h != NULL
+ && (h->type == bfd_link_hash_defined
+ || h->type == bfd_link_hash_defweak)
+ && ! bfd_is_abs_section (h->u.def.section))
+ {
+ h->u.def.section->flags |= SEC_KEEP;
+ }
+ }
+
+ /* 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 (output_bfd, &link_info);
+}
+
+/* Relax all sections until bfd_relax_section gives up. */
+
+static void
+relax_sections (void)
+{
+ /* Keep relaxing until bfd_relax_section gives up. */
+ bfd_boolean relax_again;
+
+ do
+ {
+ relax_again = FALSE;
+
+ /* 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. */
+ lang_size_sections (&relax_again, FALSE);
+ }
+ while (relax_again);
+}
+
+void
+lang_process (void)
+{
+ 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 ();
+
+ 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);
+
+ 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);
+
+ /* 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 (output_bfd, &link_info);
+
+ /* Look for a text section and set the readonly attribute in it. */
+ found = bfd_get_section_by_name (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 ();
+
+ /* Size up the sections. */
+ lang_size_sections (NULL, !command_line.relax);
+
+ /* Now run around and relax if we can. */
+ if (command_line.relax)
+ {
+ /* 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--)
+ {
+ relax_sections ();
+ link_info.relax_pass++;
+ }
+
+ /* Final extra sizing to report errors. */
+ lang_do_assignments ();
+ lang_reset_memory_regions ();
+ lang_size_sections (NULL, TRUE);
+ }
+
+ /* See if anything special should be done now we know how big
+ everything is. */
+ 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 ();
+
+ /* Make sure that the section addresses make sense. */
+ if (! link_info.relocatable
+ && command_line.check_section_addresses)
+ lang_check_section_addresses ();
+
+ /* Final stuffs. */
+ ldemul_finish ();
+ 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;
+
+ /* 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 = new_stat (lang_wild_statement, stat_ptr);
+ new->filename = NULL;
+ new->filenames_sorted = FALSE;
+ if (filespec != NULL)
+ {
+ new->filename = filespec->name;
+ new->filenames_sorted = filespec->sorted == by_name;
+ }
+ new->section_list = section_list;
+ new->keep_sections = keep_sections;
+ lang_list_init (&new->children);
+ analyze_walk_wild_section_handler (new);
+}
+
+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;
+
+ new = new_stat (lang_target_statement, stat_ptr);
+ new->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;
+
+ new = new_stat (lang_fill_statement, stat_ptr);
+ new->fill = fill;
+}
+
+void
+lang_add_data (int type, union etree_union *exp)
+{
+ lang_data_statement_type *new;
+
+ new = new_stat (lang_data_statement, stat_ptr);
+ new->exp = exp;
+ new->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;
+
+ new = new_stat (lang_assignment_statement, stat_ptr);
+ new->exp = exp;
+ return new;
+}
+
+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);
+ current_section->fill = fill;
+ current_section->phdrs = phdrs;
+ stat_ptr = &statement_list;
+}
+
+/* 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 (output_bfd, secname);
+ if (sec == NULL)
+ h->u.def.value = 0;
+ else
+ h->u.def.value = bfd_get_section_vma (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 (output_bfd, secname);
+ if (sec == NULL)
+ h->u.def.value = 0;
+ else
+ h->u.def.value = (bfd_get_section_vma (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;
+ }
+}
+
+/* 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);
+ 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)
+{
+ stat_ptr = &statement_list;
+}
+
+/* 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;
+
+ n = 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;
+
+ for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
+ ;
+ *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 = 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 == -1)
+ 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;
+ 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 = 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 (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 == -1
+ || 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 = 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, normal_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 = 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 = xmalloc (strlen (name) + 1);
+ s2 = clean;
+ for (s1 = name; *s1 != '\0'; s1++)
+ if (ISALNUM (*s1) || *s1 == '_')
+ *s2++ = *s1;
+ *s2 = '\0';
+
+ buf = xmalloc (strlen (clean) + sizeof "__load_start_");
+ sprintf (buf, "__load_start_%s", clean);
+ lang_add_assignment (exp_assop ('=', buf,
+ exp_nameop (LOADADDR, name)));
+
+ buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
+ sprintf (buf, "__load_stop_%s", clean);
+ lang_add_assignment (exp_assop ('=', buf,
+ exp_binop ('+',
+ exp_nameop (LOADADDR, name),
+ exp_nameop (SIZEOF, name))));
+
+ 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;
+ else if (lma_region == 0)
+ l->os->load_base = exp_binop ('+',
+ exp_nameop (LOADADDR, l->next->os->name),
+ exp_nameop (SIZEOF, l->next->os->name));
+
+ if (phdrs != NULL && l->os->phdrs == NULL)
+ l->os->phdrs = phdrs;
+
+ if (nocrossrefs)
+ {
+ lang_nocrossref_type *nc;
+
+ nc = 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->symbol))
+ {
+ struct bfd_elf_version_expr e;
+
+ switch (prev ? prev->mask : 0)
+ {
+ case 0:
+ if (head->mask & BFD_ELF_VERSION_C_TYPE)
+ {
+ e.symbol = sym;
+ expr = htab_find (head->htab, &e);
+ while (expr && strcmp (expr->symbol, 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.symbol = cxx_sym;
+ expr = htab_find (head->htab, &e);
+ while (expr && strcmp (expr->symbol, 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.symbol = java_sym;
+ expr = htab_find (head->htab, &e);
+ while (expr && strcmp (expr->symbol, 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->symbol)
+ 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 string pointing to the symbol name. */
+
+static const char *
+realsymbol (const char *pattern)
+{
+ const char *p;
+ bfd_boolean changed = FALSE, backslash = FALSE;
+ char *s, *symbol = 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 && (*p == '?' || *p == '*' || *p == '['))
+ {
+ free (symbol);
+ return NULL;
+ }
+
+ if (backslash)
+ {
+ /* Remove the preceding backslash. */
+ *(s - 1) = *p;
+ changed = TRUE;
+ }
+ else
+ *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 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,
+ const char *lang,
+ bfd_boolean literal_p)
+{
+ struct bfd_elf_version_expr *ret;
+
+ ret = xmalloc (sizeof *ret);
+ ret->next = orig;
+ ret->pattern = literal_p ? NULL : new;
+ ret->symver = 0;
+ ret->script = 0;
+ ret->symbol = literal_p ? new : realsymbol (new);
+
+ 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 = 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 = p;
+
+ return htab_hash_string (e->symbol);
+}
+
+static int
+version_expr_head_eq (const void *p1, const void *p2)
+{
+ const struct bfd_elf_version_expr *e1 = p1;
+ const struct bfd_elf_version_expr *e2 = p2;
+
+ return strcmp (e1->symbol, e2->symbol) == 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->symbol)
+ 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->symbol)
+ {
+ *remaining_loc = e;
+ remaining_loc = &e->next;
+ }
+ else
+ {
+ void **loc = htab_find_slot (head->htab, e, INSERT);
+
+ if (*loc)
+ {
+ struct bfd_elf_version_expr *e1, *last;
+
+ e1 = *loc;
+ last = NULL;
+ do
+ {
+ if (e1->mask == e->mask)
+ {
+ last = NULL;
+ break;
+ }
+ last = e1;
+ e1 = e1->next;
+ }
+ while (e1 && strcmp (e1->symbol, e->symbol) == 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->symbol); */
+ 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->symbol)
+ {
+ e2 = htab_find (t->locals.htab, e1);
+ while (e2 && strcmp (e1->symbol, e2->symbol) == 0)
+ {
+ if (e1->mask == e2->mask)
+ einfo (_("%X%P: duplicate expression `%s'"
+ " in version information\n"), e1->symbol);
+ e2 = e2->next;
+ }
+ }
+ else if (!e1->symbol)
+ 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->symbol)
+ {
+ e2 = htab_find (t->globals.htab, e1);
+ while (e2 && strcmp (e1->symbol, e2->symbol) == 0)
+ {
+ if (e1->mask == e2->mask)
+ einfo (_("%X%P: duplicate expression `%s'"
+ " in version information\n"),
+ e1->symbol);
+ e2 = e2->next;
+ }
+ }
+ else if (!e1->symbol)
+ 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 = 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);
+
+ 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 = 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;
+ }
+
+ 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 = xmalloc (sizeof *ent);
+ ent->name = xstrdup (name);
+ ent->next = unique_section_list;
+ unique_section_list = ent;
+}
diff --git a/binutils-2.17/ld/ldlang.h b/binutils-2.17/ld/ldlang.h
new file mode 100644
index 00000000..8b0d492e
--- /dev/null
+++ b/binutils-2.17/ld/ldlang.h
@@ -0,0 +1,608 @@
+/* ldlang.h - linker command language support
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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 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_struct
+{
+ char *name;
+ struct memory_region_struct *next;
+ bfd_vma origin;
+ bfd_size_type length;
+ bfd_vma current;
+ bfd_size_type old_length;
+ flagword flags;
+ flagword not_flags;
+ bfd_boolean had_full_message;
+} lang_memory_region_type;
+
+typedef struct lang_statement_header_struct
+{
+ union lang_statement_union *next;
+ 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_afile_asection_pair_statement_enum,
+ lang_constructors_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,
+ dsect_section,
+ copy_section,
+ noload_section,
+ info_section,
+ overlay_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 : 1;
+ unsigned int all_input_readonly : 1;
+ unsigned int ignored : 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;
+
+ file_ptr passive_position;
+
+ /* Symbol table of the file. */
+ asymbol **asymbols;
+ unsigned int symbol_count;
+
+ /* 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 closed : 1;
+ 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_needed : 1;
+
+ /* Whether this entry should cause a DT_NEEDED tag only when
+ satisfying references from regular files, or always. */
+ unsigned int as_needed : 1;
+
+ /* Whether to include the entire contents of an archive. */
+ unsigned int whole_archive : 1;
+
+ unsigned int loaded : 1;
+
+ unsigned int real : 1;
+} lang_input_statement_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+ asection *section;
+} lang_input_section_type;
+
+typedef struct
+{
+ lang_statement_header_type header;
+ asection *section;
+ union lang_statement_union *file;
+} lang_afile_asection_pair_statement_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 *);
+
+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];
+};
+
+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 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_afile_asection_pair_statement_type afile_asection_pair_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_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;
+};
+
+/* 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 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 int lang_statement_iteration;
+
+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 lang_memory_region_type *lang_memory_region_default
+ (asection *);
+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_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) \
+
+extern void lang_process
+ (void);
+extern void ldlang_add_file
+ (lang_input_statement_type *);
+extern lang_output_section_statement_type *lang_output_section_find
+ (const char * const);
+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 *, 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 *const);
+extern void ldlang_add_undef
+ (const char *const);
+extern void lang_add_output_format
+ (const char *, const char *, const char *, int);
+extern void lang_list_init
+ (lang_statement_list_type *);
+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 *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_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 *);
+bfd_boolean unique_section_p
+ (const asection *);
+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 *);
+
+#endif
diff --git a/binutils-2.17/ld/ldlex.c b/binutils-2.17/ld/ldlex.c
new file mode 100644
index 00000000..a18b3bd4
--- /dev/null
+++ b/binutils-2.17/ld/ldlex.c
@@ -0,0 +1,3833 @@
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header: /cvs/src/src/ld/Attic/ldlex.c,v 1.1.16.1 2006/04/16 18:36:47 drow Exp $
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+#include <errno.h>
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.h>
+#ifndef _WIN32
+#include <unistd.h>
+#endif
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif /* __STDC__ */
+#endif /* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#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. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator). This
+ * avoids problems with code like:
+ *
+ * if ( condition_holds )
+ * yyless( 5 );
+ * else
+ * do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ *yy_cp = yy_hold_char; \
+ YY_RESTORE_YY_MORE_OFFSET \
+ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+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.
+ */
+ int 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;
+
+ /* 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
+ };
+
+static YY_BUFFER_STATE yy_current_buffer = 0;
+
+/* 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".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars; /* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1; /* 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 YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( 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 = (int) (yy_cp - yy_bp); \
+ yy_hold_char = *yy_cp; \
+ *yy_cp = '\0'; \
+ yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 182
+#define YY_END_OF_BUFFER 183
+static yyconst short int yy_accept[1301] =
+ { 0,
+ 0, 0, 162, 162, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 183, 182,
+ 180, 165, 164, 32, 180, 162, 38, 29, 44, 43,
+ 34, 35, 28, 36, 162, 37, 8, 8, 45, 46,
+ 39, 40, 27, 33, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 10, 9, 162, 110, 108, 162, 42,
+ 30, 41, 31, 181, 165, 32, 181, 160, 38, 29,
+ 44, 43, 34, 35, 28, 36, 160, 37, 8, 8,
+ 45, 46, 39, 40, 27, 33, 160, 160, 160, 160,
+
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 10, 9, 160, 160, 42, 30, 41, 31, 160,
+ 8, 8, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 110, 108, 4, 3, 2, 4, 5, 121, 120, 159,
+ 34, 35, 28, 36, 159, 37, 8, 8, 45, 46,
+ 40, 33, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 10, 9, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 31, 179, 177,
+ 178, 180, 172, 171, 166, 173, 174, 170, 170, 170,
+
+ 170, 175, 176, 165, 15, 0, 163, 162, 8, 26,
+ 24, 22, 20, 21, 1, 23, 8, 8, 162, 18,
+ 17, 14, 16, 19, 162, 162, 162, 162, 114, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 25, 13, 160, 6, 22, 20,
+ 21, 0, 1, 23, 8, 0, 7, 7, 8, 7,
+ 14, 160, 7, 7, 7, 160, 160, 114, 7, 160,
+
+ 160, 7, 160, 160, 160, 7, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 7, 160, 8, 8, 0, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 4, 4, 120, 120, 159, 6, 122, 22, 23,
+ 123, 159, 7, 7, 7, 159, 159, 159, 7, 159,
+ 7, 7, 159, 159, 159, 159, 159, 159, 159, 159,
+ 7, 159, 159, 159, 7, 159, 7, 7, 159, 159,
+
+ 159, 159, 159, 159, 159, 159, 179, 178, 171, 170,
+ 0, 170, 170, 170, 11, 12, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 86, 162, 162, 162,
+ 162, 162, 162, 162, 162, 68, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 162, 111, 109, 162, 8, 161, 8, 160, 7,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 59, 60, 160, 160, 160,
+
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 86, 160, 160, 160, 160, 68, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 111, 109, 4, 8, 159, 159, 159, 159, 159,
+ 124, 159, 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 141, 159, 159, 159,
+ 159, 159, 159, 159, 159, 159, 159, 170, 170, 170,
+ 162, 57, 162, 162, 51, 162, 93, 162, 102, 162,
+ 162, 162, 162, 162, 162, 162, 82, 162, 162, 162,
+
+ 162, 103, 162, 162, 118, 162, 162, 91, 162, 64,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 89,
+ 162, 162, 162, 162, 162, 99, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 160, 57, 160, 160, 160,
+ 51, 160, 102, 160, 160, 160, 160, 160, 103, 118,
+ 160, 160, 64, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 93, 160, 160, 160, 160,
+ 82, 160, 160, 160, 160, 160, 91, 160, 160, 160,
+ 160, 160, 89, 160, 160, 160, 99, 160, 160, 160,
+ 160, 160, 159, 159, 159, 128, 136, 127, 159, 159,
+
+ 138, 131, 134, 159, 159, 139, 159, 159, 159, 159,
+ 159, 145, 153, 144, 159, 159, 156, 148, 151, 159,
+ 159, 157, 159, 159, 170, 170, 170, 162, 53, 162,
+ 50, 162, 162, 162, 162, 101, 62, 162, 162, 88,
+ 162, 74, 162, 162, 73, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 113, 162, 162, 162, 162,
+ 92, 162, 162, 162, 90, 162, 162, 162, 162, 162,
+ 162, 162, 160, 53, 160, 160, 50, 160, 160, 101,
+ 160, 74, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 62, 160,
+
+ 88, 160, 160, 160, 73, 160, 160, 160, 160, 113,
+ 160, 160, 92, 160, 90, 160, 160, 160, 160, 159,
+ 129, 126, 159, 159, 138, 138, 133, 159, 137, 159,
+ 159, 146, 143, 159, 159, 156, 156, 150, 159, 155,
+ 159, 170, 170, 168, 162, 162, 162, 162, 162, 162,
+ 162, 63, 162, 162, 162, 52, 162, 47, 162, 162,
+ 100, 162, 48, 72, 162, 162, 162, 162, 162, 69,
+ 162, 162, 162, 162, 87, 70, 162, 162, 162, 160,
+ 61, 160, 160, 160, 160, 52, 160, 160, 100, 160,
+ 48, 160, 160, 160, 69, 160, 160, 160, 160, 160,
+
+ 160, 63, 160, 160, 160, 47, 160, 72, 160, 160,
+ 160, 160, 160, 87, 70, 160, 159, 159, 63, 135,
+ 132, 159, 159, 159, 154, 152, 149, 159, 169, 167,
+ 162, 162, 162, 162, 162, 76, 162, 162, 112, 162,
+ 162, 162, 94, 162, 162, 96, 116, 162, 162, 162,
+ 162, 162, 107, 83, 162, 49, 162, 162, 160, 160,
+ 160, 76, 160, 160, 160, 160, 104, 116, 160, 160,
+ 107, 160, 160, 160, 160, 160, 160, 112, 160, 94,
+ 160, 96, 160, 160, 160, 83, 49, 159, 159, 159,
+ 159, 159, 159, 140, 162, 162, 162, 162, 162, 162,
+
+ 162, 58, 162, 162, 162, 162, 162, 162, 81, 162,
+ 162, 162, 115, 158, 162, 140, 160, 160, 160, 58,
+ 160, 160, 160, 160, 160, 115, 158, 160, 160, 160,
+ 160, 160, 160, 160, 160, 81, 160, 140, 125, 130,
+ 158, 142, 147, 75, 162, 162, 162, 162, 162, 162,
+ 162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
+ 162, 75, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 160, 160, 162,
+ 162, 162, 162, 162, 162, 162, 105, 106, 162, 162,
+ 162, 71, 162, 162, 162, 162, 162, 160, 160, 160,
+
+ 105, 106, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 71, 160, 160, 162, 162, 162, 162, 162,
+ 162, 95, 85, 162, 162, 162, 162, 162, 162, 162,
+ 160, 160, 95, 160, 160, 160, 160, 160, 160, 160,
+ 160, 85, 160, 160, 160, 78, 162, 162, 119, 162,
+ 162, 162, 162, 162, 162, 162, 97, 162, 160, 119,
+ 160, 160, 160, 160, 78, 160, 160, 160, 160, 160,
+ 97, 162, 162, 162, 162, 84, 162, 67, 162, 162,
+ 162, 160, 160, 67, 160, 160, 160, 160, 160, 84,
+ 160, 162, 162, 162, 162, 162, 162, 117, 66, 162,
+
+ 65, 160, 160, 160, 117, 66, 65, 160, 160, 160,
+ 160, 162, 162, 162, 162, 162, 162, 162, 160, 160,
+ 160, 160, 160, 160, 160, 162, 162, 56, 162, 162,
+ 162, 162, 160, 56, 160, 160, 160, 160, 160, 162,
+ 162, 162, 162, 162, 98, 160, 160, 160, 160, 160,
+ 98, 162, 54, 162, 162, 162, 54, 160, 160, 160,
+ 160, 162, 162, 162, 162, 160, 160, 160, 160, 162,
+ 162, 162, 162, 160, 160, 160, 160, 77, 162, 162,
+ 162, 160, 77, 160, 160, 55, 162, 162, 55, 160,
+ 160, 79, 162, 79, 160, 162, 160, 80, 80, 0
+
+ } ;
+
+static yyconst int 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 int yy_meta[82] =
+ { 0,
+ 1, 1, 2, 3, 1, 1, 4, 1, 1, 1,
+ 1, 5, 6, 7, 8, 9, 10, 11, 11, 8,
+ 1, 1, 7, 1, 5, 11, 11, 11, 11, 11,
+ 11, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 8, 4, 8, 3, 9, 11, 11, 11, 11,
+ 11, 11, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 1, 1, 1,
+ 10
+ } ;
+
+static yyconst short int yy_base[1323] =
+ { 0,
+ 0, 0, 0, 0, 81, 0, 156, 0, 226, 306,
+ 386, 0, 164, 174, 467, 548, 629, 710, 2217, 2218,
+ 2218, 2214, 2218, 2192, 2209, 774, 2218, 155, 2218, 2218,
+ 2190, 2189, 0, 2188, 0, 156, 304, 235, 0, 2218,
+ 149, 2187, 181, 0, 230, 172, 159, 181, 171, 221,
+ 2166, 2171, 2168, 2176, 226, 139, 230, 240, 229, 2159,
+ 304, 2178, 2173, 0, 0, 2144, 2140, 2128, 2134, 2218,
+ 185, 2218, 0, 2218, 2196, 2174, 2191, 819, 2218, 254,
+ 2218, 2218, 2172, 2171, 2218, 198, 0, 270, 864, 143,
+ 2218, 2218, 246, 2170, 261, 2218, 923, 330, 466, 470,
+
+ 489, 498, 2149, 2152, 2160, 258, 263, 260, 252, 2146,
+ 302, 2218, 2218, 547, 2123, 2218, 273, 2218, 0, 982,
+ 638, 717, 550, 328, 323, 325, 253, 339, 2150, 2147,
+ 341, 468, 483, 462, 496, 2139, 574, 2158, 2153, 2124,
+ 2120, 2108, 1027, 2218, 2218, 0, 2218, 2218, 2176, 1072,
+ 2155, 2154, 2218, 2153, 0, 2152, 0, 292, 2218, 0,
+ 2151, 2218, 1117, 504, 556, 548, 572, 585, 299, 2147,
+ 2129, 2125, 143, 2127, 2218, 2218, 596, 553, 618, 668,
+ 631, 312, 2112, 2096, 2092, 443, 2094, 0, 2163, 2218,
+ 0, 2152, 2218, 0, 2218, 2218, 2218, 2143, 512, 577,
+
+ 454, 2218, 2218, 2160, 2218, 2156, 2218, 0, 1176, 2218,
+ 2218, 0, 0, 0, 0, 0, 728, 0, 623, 2137,
+ 2218, 0, 2218, 2136, 2114, 2128, 2122, 2099, 0, 2115,
+ 2113, 2107, 557, 2121, 2105, 2118, 2118, 2102, 536, 2109,
+ 2105, 2101, 2103, 2105, 636, 2111, 2101, 634, 2098, 2100,
+ 2088, 634, 2099, 2101, 2089, 2103, 2103, 2091, 2104, 652,
+ 2089, 2077, 2084, 2096, 2079, 2098, 2096, 2078, 2078, 2077,
+ 2046, 2049, 2054, 2039, 2218, 2218, 0, 1227, 2218, 2218,
+ 2218, 0, 2218, 0, 307, 731, 0, 2218, 2218, 0,
+ 2218, 714, 779, 782, 0, 2081, 168, 0, 785, 2075,
+
+ 2073, 2071, 814, 825, 2081, 2082, 2069, 2077, 2077, 2067,
+ 2079, 2055, 2064, 2053, 500, 2064, 2066, 2069, 2058, 2065,
+ 2045, 2065, 2067, 828, 2016, 634, 848, 0, 2048, 2062,
+ 2045, 640, 2059, 2043, 2056, 2041, 638, 2048, 2044, 2040,
+ 2045, 729, 659, 495, 2043, 666, 2035, 2049, 2049, 2051,
+ 746, 2036, 2032, 2028, 2047, 2028, 2028, 2027, 1996, 1999,
+ 2004, 0, 1278, 2063, 2218, 0, 1329, 0, 0, 2218,
+ 0, 711, 738, 715, 0, 2031, 861, 862, 2030, 2034,
+ 2017, 2018, 2016, 2033, 2020, 2028, 2029, 2027, 2028, 2007,
+ 788, 1987, 791, 882, 1986, 1990, 1975, 1976, 1974, 1989,
+
+ 1977, 1984, 1985, 1983, 1984, 1965, 2037, 0, 0, 2018,
+ 2017, 666, 566, 558, 2218, 2218, 1996, 1992, 2002, 1994,
+ 2003, 2003, 2000, 1985, 1978, 2001, 2000, 1991, 1996, 1980,
+ 1985, 1991, 1983, 1993, 1990, 1971, 0, 1979, 1975, 1980,
+ 1967, 1971, 1979, 1981, 1977, 0, 1968, 1962, 1963, 1968,
+ 1964, 1953, 1970, 1960, 1957, 1956, 1951, 1968, 1953, 1950,
+ 1956, 1950, 1962, 1946, 1962, 1963, 1945, 1961, 1949, 1953,
+ 1940, 1913, 0, 0, 1921, 0, 0, 718, 1941, 900,
+ 1948, 1949, 1939, 1948, 1948, 1925, 1948, 932, 1945, 1935,
+ 1925, 1930, 1928, 1936, 1938, 0, 0, 1921, 1922, 1924,
+
+ 1913, 1930, 1918, 1913, 1921, 1928, 1929, 1930, 1885, 1893,
+ 1910, 1922, 1907, 1924, 1915, 1905, 1917, 1909, 1919, 1916,
+ 0, 1906, 1908, 1895, 1908, 0, 1899, 1901, 1896, 1893,
+ 1892, 1905, 1890, 1887, 1888, 1885, 1903, 1885, 1890, 1894,
+ 1881, 0, 0, 0, 0, 1884, 667, 1884, 1873, 1851,
+ 0, 1851, 1835, 1825, 1838, 1836, 1831, 1813, 1794, 1785,
+ 1783, 1750, 682, 1743, 1742, 1731, 0, 1740, 1725, 1640,
+ 1653, 1651, 1650, 1643, 1635, 1636, 1638, 274, 668, 741,
+ 1669, 0, 1666, 1674, 0, 1667, 0, 1657, 0, 1656,
+ 1644, 1660, 1653, 1647, 1650, 1652, 0, 1649, 1663, 1650,
+
+ 1644, 0, 1662, 1643, 0, 1642, 1660, 0, 1642, 0,
+ 1644, 1643, 1656, 1625, 1646, 1633, 1641, 1633, 1642, 0,
+ 1647, 1640, 1643, 1627, 1631, 1614, 1635, 1639, 1622, 1629,
+ 1631, 1634, 1629, 1590, 1586, 1618, 0, 1615, 1610, 1622,
+ 0, 1614, 0, 1588, 1601, 1589, 1587, 1591, 0, 0,
+ 1586, 1604, 0, 1589, 1602, 1571, 1592, 1588, 1590, 1593,
+ 1582, 1587, 1583, 1552, 1548, 0, 1572, 1571, 1565, 1571,
+ 0, 1568, 1581, 1564, 1582, 1563, 0, 1564, 1566, 1559,
+ 1567, 1559, 0, 1574, 1567, 1555, 1543, 1569, 1552, 1562,
+ 1565, 1560, 1556, 1548, 1552, 0, 0, 0, 1547, 1563,
+
+ 1397, 0, 0, 1545, 1553, 0, 1541, 1557, 1517, 1510,
+ 1508, 0, 0, 0, 1504, 1518, 1477, 0, 0, 1502,
+ 1508, 0, 1498, 1511, 748, 756, 743, 1518, 0, 1530,
+ 0, 1511, 1523, 1508, 1521, 0, 0, 1521, 1510, 0,
+ 1492, 0, 1518, 1512, 0, 1512, 1515, 1493, 1498, 1515,
+ 1511, 1505, 1499, 1492, 1510, 0, 1506, 1501, 1493, 1492,
+ 0, 1499, 1502, 1502, 0, 1481, 1492, 1498, 1479, 1483,
+ 1447, 1459, 1474, 0, 1474, 1488, 0, 1473, 1486, 0,
+ 1486, 0, 1481, 1484, 1468, 1482, 1476, 1470, 1482, 1478,
+ 1467, 1474, 1478, 1469, 1422, 1434, 1452, 1464, 0, 1454,
+
+ 0, 1436, 1461, 1450, 0, 1430, 1448, 1428, 1446, 0,
+ 1438, 1430, 0, 1442, 0, 197, 249, 302, 443, 466,
+ 0, 502, 516, 561, 0, 1557, 0, 585, 0, 592,
+ 566, 0, 649, 653, 651, 0, 1637, 0, 720, 0,
+ 724, 775, 801, 767, 772, 810, 794, 786, 823, 831,
+ 833, 0, 843, 844, 830, 0, 856, 0, 843, 851,
+ 0, 872, 0, 851, 858, 880, 855, 873, 870, 861,
+ 868, 883, 890, 901, 0, 0, 896, 862, 882, 894,
+ 0, 917, 917, 919, 927, 0, 929, 918, 0, 933,
+ 0, 915, 940, 926, 917, 937, 943, 904, 923, 940,
+
+ 932, 0, 961, 960, 946, 0, 947, 938, 945, 940,
+ 958, 948, 961, 0, 0, 964, 959, 965, 0, 0,
+ 0, 961, 933, 944, 0, 0, 0, 941, 996, 997,
+ 988, 989, 992, 981, 990, 0, 967, 984, 0, 969,
+ 983, 984, 0, 972, 1003, 0, 974, 1002, 988, 977,
+ 1002, 980, 0, 0, 998, 0, 977, 983, 1018, 1019,
+ 1018, 0, 995, 1009, 1016, 1004, 0, 1005, 1006, 1030,
+ 0, 1025, 1004, 1002, 1039, 1028, 1029, 0, 1014, 0,
+ 1045, 0, 1043, 1029, 1018, 0, 0, 1045, 1048, 1048,
+ 1018, 1020, 1020, 0, 1053, 1038, 1065, 1055, 1063, 1057,
+
+ 1068, 0, 1067, 1061, 1062, 1066, 1074, 1074, 0, 1065,
+ 1080, 1085, 0, 0, 1051, 0, 1084, 1076, 1084, 0,
+ 1086, 1074, 1085, 1075, 1090, 0, 0, 1060, 1077, 1096,
+ 1087, 1098, 1084, 1088, 1103, 0, 1112, 0, 0, 0,
+ 0, 0, 0, 0, 1099, 1105, 1111, 1108, 1111, 1112,
+ 1122, 1115, 1128, 1115, 1125, 1117, 1116, 1136, 1127, 1139,
+ 1110, 0, 1138, 1135, 1139, 1132, 1137, 1128, 1156, 1126,
+ 1144, 1150, 1148, 1148, 1161, 1147, 1148, 1155, 1170, 1154,
+ 1168, 1160, 1163, 1161, 1170, 1165, 0, 0, 1177, 1173,
+ 1184, 0, 1189, 1187, 1183, 1180, 1159, 1181, 1184, 1178,
+
+ 0, 0, 1194, 1198, 1196, 1166, 1184, 1198, 1189, 1192,
+ 1198, 1194, 0, 1205, 1202, 1197, 1215, 1202, 1218, 1210,
+ 1212, 0, 0, 1225, 1223, 1216, 1230, 1229, 1232, 1203,
+ 1221, 1237, 0, 1239, 1226, 1240, 1210, 1228, 1245, 1235,
+ 1237, 0, 1250, 1245, 1248, 0, 1234, 1224, 0, 1225,
+ 1242, 1238, 1260, 1246, 1249, 1255, 0, 1226, 1243, 0,
+ 1270, 1256, 1259, 1231, 0, 1265, 1255, 1272, 1268, 1276,
+ 0, 1261, 1298, 1292, 1280, 0, 1281, 0, 1277, 1284,
+ 1250, 1299, 1287, 0, 1283, 1257, 1275, 1306, 1294, 0,
+ 1296, 1299, 1308, 1310, 1320, 1314, 1296, 0, 0, 1323,
+
+ 0, 1317, 1322, 1332, 0, 0, 0, 1319, 1327, 1310,
+ 1338, 1319, 1336, 1342, 1335, 1336, 1348, 1336, 1342, 1348,
+ 1341, 1329, 1343, 1355, 1343, 1345, 1352, 0, 1342, 1352,
+ 1356, 1349, 1364, 0, 1357, 1366, 1370, 1375, 1368, 1387,
+ 1376, 1376, 1389, 1386, 0, 1385, 1385, 1399, 1399, 1391,
+ 0, 1389, 0, 1374, 1405, 1392, 0, 1377, 1394, 1409,
+ 1396, 1400, 1408, 1394, 1412, 1411, 1405, 1398, 1416, 1401,
+ 1407, 1413, 1422, 1410, 1406, 1417, 1427, 0, 1425, 1415,
+ 1411, 1428, 0, 1418, 1414, 0, 1421, 1427, 0, 1423,
+ 1429, 0, 1424, 0, 1425, 1427, 1428, 0, 0, 2218,
+
+ 1717, 1728, 1739, 1750, 1761, 1772, 1780, 1788, 1796, 1807,
+ 1815, 1826, 1837, 1848, 1851, 1860, 1868, 1457, 1879, 1890,
+ 1901, 1912
+ } ;
+
+static yyconst short int yy_def[1323] =
+ { 0,
+ 1301, 1301, 1300, 3, 1300, 5, 5, 7, 1302, 1302,
+ 1300, 11, 1303, 1303, 1304, 1304, 1305, 1305, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1306, 1307, 1300, 1300, 1300, 1300,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1300,
+ 1300, 1307, 1300, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1300,
+ 1300, 1300, 1307, 1300, 1300, 1300, 1306, 1308, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1308, 1308, 1300, 89,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1308, 97, 97, 97,
+
+ 97, 97, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1300, 1300, 97, 1308, 1300, 1300, 1300, 1308, 1308,
+ 1300, 1300, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1309, 1300, 1300, 1309, 1300, 1300, 1310, 1311,
+ 1312, 1300, 1300, 1300, 1311, 1311, 89, 89, 1300, 1313,
+ 1300, 1300, 1311, 163, 163, 163, 163, 163, 1311, 1311,
+ 1311, 1311, 1311, 1311, 1300, 1300, 163, 163, 163, 163,
+ 163, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1300, 1300,
+ 1314, 1300, 1300, 1315, 1300, 1300, 1300, 1316, 1316, 1316,
+
+ 1316, 1300, 1300, 1300, 1300, 1306, 1300, 1307, 1307, 1300,
+ 1300, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 209, 1300,
+ 1300, 1307, 1300, 1300, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1300, 1300, 1308, 1308, 1300, 1300,
+ 1300, 1317, 1300, 1308, 89, 89, 286, 1300, 1300, 1318,
+ 1300, 97, 97, 97, 1308, 1308, 1308, 1308, 97, 1308,
+
+ 1308, 1308, 97, 97, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 97, 1308, 120, 1300, 1318, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1309, 1309, 1310, 1300, 1311, 1311, 1312, 1312, 1300,
+ 1313, 163, 163, 163, 1311, 1311, 163, 163, 1311, 1311,
+ 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
+ 163, 1311, 163, 163, 1311, 1311, 1311, 1311, 1311, 1311,
+
+ 1311, 1311, 1311, 1311, 1311, 1311, 1300, 1314, 1315, 1316,
+ 1300, 1316, 1316, 1316, 1300, 1300, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1308, 1317, 1318, 1308, 97,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 97, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1309, 1311, 1311, 1311, 1311, 1311, 1311,
+ 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
+ 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
+ 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1316, 1316, 1316,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
+
+ 1319, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
+ 1311, 1311, 1311, 1311, 1311, 1311, 1320, 1311, 1311, 1311,
+ 1311, 1311, 1311, 1311, 1316, 1316, 1316, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1311,
+ 1311, 1311, 1311, 1311, 1321, 1319, 1311, 1311, 1311, 1311,
+ 1311, 1311, 1311, 1311, 1311, 1322, 1320, 1311, 1311, 1311,
+ 1311, 1316, 1316, 1316, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1311, 1311, 1311, 1311,
+ 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1316, 1316,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1311, 1311, 1311,
+ 1311, 1311, 1311, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1311, 1311, 1311,
+ 1311, 1311, 1311, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1308, 1308, 1308,
+
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+
+ 1307, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1308, 1308,
+ 1308, 1308, 1308, 1308, 1308, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1307, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1308, 1308, 1308, 1308, 1308,
+ 1308, 1307, 1307, 1307, 1307, 1307, 1308, 1308, 1308, 1308,
+ 1308, 1307, 1307, 1307, 1307, 1308, 1308, 1308, 1308, 1307,
+ 1307, 1307, 1307, 1308, 1308, 1308, 1308, 1307, 1307, 1307,
+ 1307, 1308, 1308, 1308, 1308, 1307, 1307, 1307, 1308, 1308,
+ 1308, 1307, 1307, 1308, 1308, 1307, 1308, 1307, 1308, 0,
+
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300
+ } ;
+
+static yyconst short int yy_nxt[2300] =
+ { 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, 35, 61, 62, 35, 63, 35, 35, 35,
+ 35, 64, 35, 65, 21, 35, 66, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 67, 35, 35, 68,
+ 35, 35, 69, 35, 35, 35, 35, 70, 71, 72,
+ 73, 74, 75, 23, 76, 77, 74, 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, 87, 104, 87, 105, 106, 107, 108,
+ 109, 110, 87, 87, 111, 87, 87, 87, 87, 87,
+ 87, 87, 112, 87, 113, 74, 87, 114, 102, 102,
+ 102, 102, 102, 87, 87, 87, 87, 87, 87, 87,
+ 87, 87, 87, 115, 87, 87, 87, 87, 116, 117,
+ 118, 119, 120, 210, 249, 189, 190, 215, 250, 191,
+ 220, 221, 388, 121, 122, 189, 190, 211, 216, 191,
+ 192, 123, 124, 125, 126, 127, 128, 389, 129, 130,
+ 192, 288, 131, 132, 133, 134, 135, 136, 233, 137,
+
+ 138, 234, 139, 223, 224, 230, 235, 275, 231, 238,
+ 236, 482, 140, 87, 87, 87, 87, 87, 288, 239,
+ 281, 232, 141, 483, 237, 142, 74, 74, 20, 74,
+ 74, 74, 143, 74, 74, 74, 74, 74, 144, 74,
+ 145, 193, 913, 121, 122, 74, 74, 74, 147, 74,
+ 74, 193, 217, 217, 240, 247, 225, 241, 226, 251,
+ 242, 257, 210, 276, 282, 248, 227, 220, 221, 252,
+ 218, 258, 218, 228, 229, 914, 211, 74, 253, 74,
+ 74, 283, 254, 223, 224, 255, 256, 310, 312, 314,
+ 316, 336, 284, 411, 317, 275, 313, 311, 318, 315,
+
+ 218, 337, 218, 74, 74, 74, 74, 74, 20, 74,
+ 74, 74, 143, 74, 74, 74, 74, 74, 144, 74,
+ 145, 217, 217, 121, 122, 74, 74, 74, 147, 74,
+ 74, 320, 383, 260, 725, 321, 261, 262, 384, 218,
+ 288, 218, 322, 263, 264, 265, 915, 323, 266, 267,
+ 334, 276, 219, 268, 335, 288, 299, 74, 299, 74,
+ 74, 300, 332, 300, 301, 333, 301, 288, 305, 218,
+ 310, 218, 338, 277, 277, 339, 399, 331, 340, 219,
+ 343, 400, 288, 74, 74, 74, 21, 22, 148, 24,
+ 21, 149, 150, 27, 28, 29, 30, 151, 152, 153,
+
+ 154, 155, 156, 157, 158, 159, 160, 41, 161, 43,
+ 162, 163, 164, 165, 166, 167, 168, 155, 155, 155,
+ 155, 155, 169, 155, 170, 171, 172, 155, 155, 173,
+ 174, 155, 155, 155, 155, 155, 155, 175, 155, 176,
+ 21, 155, 177, 178, 179, 166, 180, 181, 155, 155,
+ 155, 155, 182, 155, 183, 184, 185, 155, 186, 187,
+ 155, 155, 155, 70, 71, 72, 188, 21, 189, 190,
+ 21, 21, 191, 411, 21, 21, 21, 21, 21, 21,
+ 195, 21, 916, 192, 21, 21, 195, 195, 21, 21,
+ 21, 21, 299, 344, 299, 303, 299, 345, 299, 304,
+
+ 316, 313, 277, 404, 317, 302, 277, 347, 348, 277,
+ 277, 917, 314, 305, 277, 299, 405, 299, 21, 21,
+ 21, 21, 346, 414, 299, 277, 299, 499, 349, 377,
+ 374, 411, 277, 277, 277, 526, 500, 306, 319, 918,
+ 366, 277, 277, 496, 196, 21, 197, 21, 21, 189,
+ 190, 21, 21, 191, 919, 21, 21, 21, 21, 21,
+ 21, 195, 21, 431, 192, 21, 21, 195, 195, 21,
+ 21, 21, 21, 299, 374, 299, 329, 411, 330, 374,
+ 432, 378, 374, 277, 366, 411, 296, 412, 379, 366,
+ 277, 277, 366, 297, 298, 424, 411, 425, 374, 21,
+
+ 21, 21, 21, 351, 324, 920, 352, 321, 366, 393,
+ 380, 374, 921, 353, 322, 354, 580, 922, 355, 323,
+ 381, 366, 374, 356, 382, 196, 21, 197, 21, 21,
+ 189, 190, 366, 25, 191, 579, 21, 21, 21, 21,
+ 923, 21, 195, 413, 374, 192, 21, 21, 195, 195,
+ 21, 21, 21, 391, 366, 327, 327, 374, 208, 444,
+ 208, 449, 392, 438, 450, 490, 439, 366, 440, 476,
+ 451, 476, 445, 289, 394, 289, 441, 459, 513, 460,
+ 486, 395, 517, 461, 495, 411, 328, 411, 208, 199,
+ 208, 200, 694, 499, 374, 201, 528, 525, 695, 476,
+
+ 398, 476, 500, 289, 366, 289, 202, 21, 203, 21,
+ 21, 189, 190, 328, 25, 191, 924, 21, 21, 21,
+ 21, 925, 21, 195, 926, 726, 192, 21, 21, 195,
+ 195, 21, 21, 21, 327, 327, 396, 374, 710, 578,
+ 299, 374, 299, 397, 711, 217, 217, 366, 286, 286,
+ 277, 366, 289, 289, 289, 289, 522, 277, 277, 492,
+ 411, 523, 411, 218, 374, 218, 1300, 411, 1300, 524,
+ 199, 533, 200, 534, 366, 411, 201, 505, 927, 288,
+ 928, 546, 289, 289, 289, 289, 411, 202, 21, 203,
+ 21, 209, 209, 218, 411, 218, 1300, 727, 1300, 209,
+
+ 209, 209, 209, 209, 209, 299, 288, 299, 299, 844,
+ 480, 299, 843, 299, 374, 277, 931, 374, 277, 842,
+ 411, 277, 479, 277, 366, 277, 277, 366, 277, 277,
+ 209, 209, 209, 209, 209, 209, 278, 278, 932, 933,
+ 299, 934, 299, 929, 278, 278, 278, 278, 278, 278,
+ 277, 299, 935, 299, 299, 488, 299, 277, 487, 936,
+ 562, 277, 937, 564, 277, 327, 327, 930, 277, 277,
+ 938, 277, 277, 939, 940, 278, 278, 278, 278, 278,
+ 278, 285, 285, 289, 941, 289, 942, 374, 374, 286,
+ 287, 286, 287, 286, 286, 943, 288, 366, 366, 289,
+
+ 509, 289, 944, 288, 548, 549, 945, 946, 374, 947,
+ 948, 949, 290, 289, 950, 289, 951, 952, 366, 953,
+ 286, 287, 286, 287, 286, 286, 299, 288, 299, 289,
+ 954, 289, 955, 288, 956, 957, 277, 958, 959, 290,
+ 292, 292, 637, 277, 277, 960, 961, 962, 292, 293,
+ 292, 294, 292, 292, 565, 295, 963, 964, 299, 296,
+ 299, 965, 295, 966, 967, 645, 297, 298, 277, 968,
+ 969, 295, 970, 971, 972, 277, 277, 973, 974, 292,
+ 299, 292, 299, 292, 292, 975, 295, 976, 977, 978,
+ 979, 980, 295, 981, 982, 983, 984, 985, 295, 326,
+
+ 326, 986, 987, 988, 989, 990, 991, 326, 326, 326,
+ 326, 326, 326, 992, 993, 411, 411, 994, 995, 996,
+ 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1007,
+ 1008, 1009, 1010, 1006, 1011, 1012, 1013, 1014, 326, 326,
+ 326, 326, 326, 326, 363, 363, 1015, 1016, 1017, 1018,
+ 1019, 1020, 363, 363, 363, 363, 363, 363, 1021, 1022,
+ 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032,
+ 1033, 1035, 1036, 1037, 1038, 1034, 1039, 1040, 1041, 1042,
+ 1043, 1044, 1045, 363, 363, 363, 363, 363, 363, 367,
+ 367, 1046, 1047, 1048, 1049, 1050, 1051, 367, 367, 367,
+
+ 367, 367, 367, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
+ 1059, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,
+ 1070, 1071, 1072, 1060, 1073, 1074, 1075, 1076, 367, 367,
+ 367, 367, 367, 367, 372, 372, 1077, 1078, 1080, 1081,
+ 1082, 1083, 372, 373, 372, 374, 372, 372, 1084, 375,
+ 1079, 1085, 1086, 376, 1087, 1089, 375, 1090, 1091, 1092,
+ 1093, 1094, 1088, 1095, 1096, 375, 1097, 1098, 1099, 1100,
+ 1103, 1101, 1104, 372, 374, 372, 374, 372, 372, 1102,
+ 375, 1105, 1106, 1107, 1108, 1109, 375, 1110, 1111, 1112,
+ 1113, 1114, 375, 209, 209, 1115, 1116, 1117, 1118, 1119,
+
+ 1120, 209, 209, 209, 209, 209, 209, 1121, 1122, 1123,
+ 1124, 218, 1125, 218, 1126, 1127, 1128, 1129, 1130, 1131,
+ 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141,
+ 1142, 1143, 209, 209, 209, 209, 209, 209, 1144, 1145,
+ 1146, 218, 1147, 218, 278, 278, 1148, 1149, 1150, 1151,
+ 1152, 1153, 278, 278, 278, 278, 278, 278, 1154, 1155,
+ 1156, 1157, 476, 1158, 476, 1159, 1160, 1161, 1162, 1163,
+ 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173,
+ 1174, 1175, 1176, 278, 278, 278, 278, 278, 278, 1177,
+ 1178, 1179, 476, 1180, 476, 363, 363, 1181, 1182, 1183,
+
+ 1184, 1185, 1186, 363, 363, 363, 363, 363, 363, 1187,
+ 1188, 1189, 1190, 544, 1191, 544, 1192, 1196, 1197, 1198,
+ 1199, 1200, 1201, 1193, 1202, 1205, 1206, 1194, 1203, 1207,
+ 1208, 1209, 1210, 1211, 363, 363, 363, 363, 363, 363,
+ 1195, 1204, 1212, 544, 1213, 544, 367, 367, 1214, 1215,
+ 1216, 1217, 1218, 1219, 367, 367, 367, 367, 367, 367,
+ 1220, 1221, 1222, 1223, 545, 1224, 545, 1225, 1226, 1227,
+ 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237,
+ 1238, 1239, 1240, 1241, 1242, 367, 367, 367, 367, 367,
+ 367, 1243, 1244, 1245, 545, 1246, 545, 825, 825, 1247,
+
+ 825, 825, 825, 1248, 825, 825, 825, 825, 825, 1249,
+ 825, 1250, 1251, 1252, 1253, 1254, 1255, 825, 825, 825,
+ 825, 825, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263,
+ 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273,
+ 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283,
+ 1284, 825, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292,
+ 1293, 1294, 1295, 1296, 1297, 1298, 1299, 478, 912, 911,
+ 910, 909, 908, 907, 825, 825, 825, 836, 836, 906,
+ 836, 836, 836, 905, 836, 836, 836, 836, 836, 904,
+ 836, 903, 902, 901, 900, 899, 898, 836, 836, 836,
+
+ 836, 836, 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, 836, 868, 867, 866, 865, 864, 863, 862, 861,
+ 860, 859, 858, 857, 856, 855, 854, 853, 852, 851,
+ 850, 849, 848, 847, 836, 836, 836, 825, 825, 846,
+ 825, 825, 825, 845, 825, 825, 825, 825, 825, 841,
+ 825, 840, 839, 838, 835, 834, 833, 825, 825, 825,
+ 825, 825, 832, 831, 830, 829, 828, 827, 824, 823,
+ 822, 821, 820, 819, 818, 817, 816, 815, 814, 813,
+
+ 812, 811, 810, 809, 808, 807, 806, 805, 804, 803,
+ 802, 825, 801, 800, 799, 798, 797, 796, 795, 794,
+ 793, 792, 791, 790, 789, 788, 787, 786, 785, 784,
+ 783, 782, 781, 780, 825, 825, 825, 836, 836, 779,
+ 836, 836, 836, 778, 836, 836, 836, 836, 836, 777,
+ 836, 776, 775, 774, 773, 772, 771, 836, 836, 836,
+ 836, 836, 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, 836, 741, 740, 739, 738, 737, 736, 735, 734,
+
+ 733, 732, 731, 730, 729, 728, 724, 723, 722, 721,
+ 720, 719, 718, 717, 836, 836, 836, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
+ 194, 198, 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 206, 206, 206, 206, 206, 206, 206, 206,
+ 206, 206, 206, 208, 208, 208, 208, 208, 208, 208,
+ 208, 277, 716, 277, 277, 277, 277, 277, 277, 362,
+
+ 715, 714, 713, 712, 362, 362, 362, 364, 364, 364,
+ 364, 364, 364, 364, 364, 364, 364, 364, 366, 709,
+ 366, 708, 366, 366, 366, 366, 368, 707, 368, 368,
+ 368, 368, 368, 368, 368, 368, 368, 371, 706, 371,
+ 371, 371, 371, 371, 371, 371, 371, 371, 408, 705,
+ 408, 408, 408, 408, 408, 408, 408, 408, 408, 409,
+ 704, 409, 410, 410, 410, 703, 702, 410, 410, 701,
+ 410, 477, 700, 477, 477, 477, 477, 477, 477, 826,
+ 699, 826, 826, 826, 826, 826, 826, 826, 826, 826,
+ 837, 698, 837, 837, 837, 837, 837, 837, 837, 837,
+
+ 837, 825, 697, 825, 825, 825, 825, 825, 825, 825,
+ 825, 825, 836, 696, 836, 836, 836, 836, 836, 836,
+ 836, 836, 836, 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, 645, 668,
+ 667, 666, 637, 665, 664, 663, 662, 661, 660, 659,
+ 658, 657, 656, 655, 654, 653, 652, 651, 650, 649,
+ 648, 647, 646, 644, 643, 642, 641, 640, 639, 638,
+ 636, 635, 634, 633, 632, 631, 630, 629, 628, 627,
+ 626, 625, 624, 623, 622, 621, 620, 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, 593, 592, 591, 590, 589, 588, 587,
+ 586, 585, 584, 583, 582, 581, 410, 411, 407, 577,
+ 576, 575, 574, 573, 572, 571, 570, 569, 568, 567,
+ 566, 563, 561, 560, 559, 558, 557, 556, 555, 554,
+ 553, 552, 551, 550, 547, 365, 543, 542, 509, 541,
+ 540, 539, 538, 537, 536, 535, 532, 531, 530, 529,
+ 527, 521, 520, 519, 518, 516, 515, 487, 514, 512,
+ 511, 479, 510, 508, 507, 506, 505, 504, 503, 502,
+
+ 501, 498, 497, 496, 495, 494, 493, 492, 491, 490,
+ 489, 486, 485, 484, 481, 475, 474, 473, 472, 471,
+ 470, 469, 468, 467, 466, 465, 464, 463, 462, 458,
+ 457, 456, 455, 454, 453, 452, 448, 447, 446, 443,
+ 442, 437, 436, 435, 434, 433, 430, 429, 428, 427,
+ 426, 423, 422, 421, 420, 419, 418, 417, 416, 415,
+ 207, 204, 411, 283, 407, 406, 403, 402, 401, 390,
+ 387, 386, 385, 291, 370, 281, 280, 369, 365, 361,
+ 360, 359, 358, 357, 350, 342, 341, 325, 319, 309,
+ 308, 307, 291, 280, 279, 207, 205, 204, 274, 273,
+
+ 272, 271, 270, 269, 259, 246, 245, 244, 243, 222,
+ 214, 213, 212, 207, 205, 204, 1300, 19, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300
+
+ } ;
+
+static yyconst short int yy_chk[2300] =
+ { 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, 28, 56, 13, 13, 36, 56, 13,
+ 41, 41, 173, 7, 7, 14, 14, 28, 36, 14,
+ 13, 7, 7, 7, 7, 7, 7, 173, 7, 7,
+ 14, 90, 7, 7, 7, 7, 7, 7, 47, 7,
+
+ 7, 47, 7, 43, 43, 46, 48, 71, 46, 49,
+ 48, 297, 7, 7, 7, 7, 7, 7, 90, 49,
+ 86, 46, 7, 297, 48, 7, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 13, 816, 9, 9, 9, 9, 9, 9, 9,
+ 9, 14, 38, 38, 50, 55, 45, 50, 45, 57,
+ 50, 59, 80, 71, 86, 55, 45, 93, 93, 57,
+ 38, 59, 38, 45, 45, 817, 80, 9, 58, 9,
+ 9, 88, 58, 95, 95, 58, 58, 106, 107, 108,
+ 109, 127, 88, 578, 109, 117, 107, 106, 109, 108,
+
+ 38, 127, 38, 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, 111, 169, 61, 578, 111, 61, 61, 169, 37,
+ 158, 37, 111, 61, 61, 61, 818, 111, 61, 61,
+ 126, 117, 37, 61, 126, 285, 98, 10, 98, 10,
+ 10, 124, 125, 98, 124, 125, 98, 158, 126, 37,
+ 131, 37, 128, 98, 98, 128, 182, 124, 128, 37,
+ 131, 182, 285, 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, 201, 15, 15, 15, 15, 15, 15,
+ 15, 15, 819, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 99, 132, 99, 100, 100, 132, 100, 100,
+
+ 134, 132, 99, 186, 134, 99, 100, 134, 134, 99,
+ 99, 820, 133, 100, 100, 101, 186, 101, 15, 15,
+ 15, 15, 133, 201, 102, 101, 102, 315, 135, 164,
+ 164, 199, 101, 101, 102, 344, 315, 101, 135, 822,
+ 164, 102, 102, 344, 15, 15, 15, 15, 16, 16,
+ 16, 16, 16, 16, 823, 16, 16, 16, 16, 16,
+ 16, 16, 16, 239, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 114, 166, 114, 123, 414, 123, 178,
+ 239, 165, 165, 114, 166, 413, 123, 199, 165, 178,
+ 114, 114, 165, 123, 123, 233, 200, 233, 167, 16,
+
+ 16, 16, 16, 137, 114, 824, 137, 137, 167, 178,
+ 167, 168, 828, 137, 137, 137, 414, 830, 137, 137,
+ 167, 168, 177, 137, 168, 16, 16, 16, 16, 17,
+ 17, 17, 177, 17, 17, 413, 17, 17, 17, 17,
+ 831, 17, 17, 200, 179, 17, 17, 17, 17, 17,
+ 17, 17, 17, 177, 179, 121, 121, 181, 219, 248,
+ 219, 252, 177, 245, 252, 337, 245, 181, 245, 326,
+ 252, 326, 248, 121, 179, 121, 245, 260, 332, 260,
+ 332, 179, 337, 260, 343, 412, 121, 579, 219, 17,
+ 219, 17, 547, 346, 180, 17, 346, 343, 547, 326,
+
+ 181, 326, 346, 121, 180, 121, 17, 17, 17, 17,
+ 18, 18, 18, 121, 18, 18, 833, 18, 18, 18,
+ 18, 834, 18, 18, 835, 579, 18, 18, 18, 18,
+ 18, 18, 18, 18, 122, 122, 180, 372, 563, 412,
+ 292, 374, 292, 180, 563, 217, 217, 372, 286, 286,
+ 292, 374, 122, 478, 122, 478, 342, 292, 292, 342,
+ 580, 342, 727, 217, 373, 217, 286, 725, 286, 342,
+ 18, 351, 18, 351, 373, 726, 18, 351, 839, 286,
+ 841, 373, 122, 478, 122, 478, 844, 18, 18, 18,
+ 18, 26, 26, 217, 842, 217, 286, 580, 286, 26,
+
+ 26, 26, 26, 26, 26, 293, 286, 293, 294, 727,
+ 294, 299, 726, 299, 391, 293, 845, 393, 294, 725,
+ 843, 299, 293, 293, 391, 294, 294, 393, 299, 299,
+ 26, 26, 26, 26, 26, 26, 78, 78, 846, 847,
+ 303, 848, 303, 842, 78, 78, 78, 78, 78, 78,
+ 303, 304, 849, 304, 324, 304, 324, 303, 303, 850,
+ 391, 304, 851, 393, 324, 327, 327, 843, 304, 304,
+ 853, 324, 324, 854, 855, 78, 78, 78, 78, 78,
+ 78, 89, 89, 327, 857, 327, 859, 377, 378, 89,
+ 89, 89, 89, 89, 89, 860, 89, 377, 378, 89,
+
+ 324, 89, 862, 89, 377, 378, 864, 865, 394, 866,
+ 867, 868, 89, 327, 869, 327, 870, 871, 394, 872,
+ 89, 89, 89, 89, 89, 89, 480, 89, 480, 89,
+ 873, 89, 874, 89, 877, 878, 480, 879, 880, 89,
+ 97, 97, 480, 480, 480, 882, 883, 884, 97, 97,
+ 97, 97, 97, 97, 394, 97, 885, 887, 488, 97,
+ 488, 888, 97, 890, 892, 488, 97, 97, 488, 893,
+ 894, 97, 895, 896, 897, 488, 488, 898, 899, 97,
+ 97, 97, 97, 97, 97, 900, 97, 901, 903, 904,
+ 905, 907, 97, 908, 909, 910, 911, 912, 97, 120,
+
+ 120, 913, 916, 917, 918, 922, 923, 120, 120, 120,
+ 120, 120, 120, 924, 928, 929, 930, 931, 932, 933,
+ 934, 935, 937, 938, 940, 941, 942, 944, 945, 947,
+ 948, 949, 950, 945, 951, 952, 955, 957, 120, 120,
+ 120, 120, 120, 120, 143, 143, 958, 959, 960, 961,
+ 963, 964, 143, 143, 143, 143, 143, 143, 965, 966,
+ 968, 969, 970, 972, 973, 974, 975, 976, 977, 979,
+ 981, 983, 984, 985, 988, 981, 989, 990, 991, 992,
+ 993, 995, 996, 143, 143, 143, 143, 143, 143, 150,
+ 150, 997, 998, 999, 1000, 1001, 1003, 150, 150, 150,
+
+ 150, 150, 150, 1004, 1005, 1006, 1007, 1008, 1010, 1011,
+ 1012, 1015, 1017, 1018, 1019, 1021, 1022, 1023, 1024, 1025,
+ 1028, 1029, 1030, 1012, 1031, 1032, 1033, 1034, 150, 150,
+ 150, 150, 150, 150, 163, 163, 1035, 1037, 1045, 1046,
+ 1047, 1048, 163, 163, 163, 163, 163, 163, 1049, 163,
+ 1037, 1050, 1051, 163, 1052, 1053, 163, 1054, 1055, 1056,
+ 1057, 1058, 1052, 1059, 1060, 163, 1061, 1063, 1064, 1065,
+ 1067, 1066, 1068, 163, 163, 163, 163, 163, 163, 1066,
+ 163, 1069, 1070, 1071, 1072, 1073, 163, 1074, 1075, 1076,
+ 1077, 1078, 163, 209, 209, 1079, 1080, 1081, 1082, 1083,
+
+ 1084, 209, 209, 209, 209, 209, 209, 1085, 1086, 1089,
+ 1090, 209, 1091, 209, 1093, 1094, 1095, 1096, 1097, 1098,
+ 1099, 1100, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110,
+ 1111, 1112, 209, 209, 209, 209, 209, 209, 1114, 1115,
+ 1116, 209, 1117, 209, 278, 278, 1118, 1119, 1120, 1121,
+ 1124, 1125, 278, 278, 278, 278, 278, 278, 1126, 1127,
+ 1128, 1129, 278, 1130, 278, 1131, 1132, 1134, 1135, 1136,
+ 1137, 1138, 1139, 1140, 1141, 1143, 1144, 1145, 1147, 1148,
+ 1150, 1151, 1152, 278, 278, 278, 278, 278, 278, 1153,
+ 1154, 1155, 278, 1156, 278, 363, 363, 1158, 1159, 1161,
+
+ 1162, 1163, 1164, 363, 363, 363, 363, 363, 363, 1166,
+ 1167, 1168, 1169, 363, 1170, 363, 1172, 1174, 1175, 1177,
+ 1179, 1180, 1181, 1173, 1182, 1183, 1185, 1173, 1182, 1186,
+ 1187, 1188, 1189, 1191, 363, 363, 363, 363, 363, 363,
+ 1173, 1182, 1192, 363, 1193, 363, 367, 367, 1194, 1195,
+ 1196, 1197, 1200, 1202, 367, 367, 367, 367, 367, 367,
+ 1203, 1204, 1208, 1209, 367, 1210, 367, 1211, 1212, 1213,
+ 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223,
+ 1224, 1225, 1226, 1227, 1229, 367, 367, 367, 367, 367,
+ 367, 1230, 1231, 1232, 367, 1233, 367, 701, 701, 1235,
+
+ 701, 701, 701, 1236, 701, 701, 701, 701, 701, 1237,
+ 701, 1238, 1239, 1240, 1241, 1242, 1243, 701, 701, 701,
+ 701, 701, 1244, 1246, 1247, 1248, 1249, 1250, 1252, 1254,
+ 1255, 1256, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
+ 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275,
+ 1276, 701, 1277, 1279, 1280, 1281, 1282, 1284, 1285, 1287,
+ 1288, 1290, 1291, 1293, 1295, 1296, 1297, 1318, 814, 812,
+ 811, 809, 808, 807, 701, 701, 701, 717, 717, 806,
+ 717, 717, 717, 804, 717, 717, 717, 717, 717, 803,
+ 717, 802, 800, 798, 797, 796, 795, 717, 717, 717,
+
+ 717, 717, 794, 793, 792, 791, 790, 789, 788, 787,
+ 786, 785, 784, 783, 781, 779, 778, 776, 775, 773,
+ 772, 771, 770, 769, 768, 767, 766, 764, 763, 762,
+ 760, 717, 759, 758, 757, 755, 754, 753, 752, 751,
+ 750, 749, 748, 747, 746, 744, 743, 741, 739, 738,
+ 735, 734, 733, 732, 717, 717, 717, 826, 826, 730,
+ 826, 826, 826, 728, 826, 826, 826, 826, 826, 724,
+ 826, 723, 721, 720, 716, 715, 711, 826, 826, 826,
+ 826, 826, 710, 709, 708, 707, 705, 704, 700, 699,
+ 695, 694, 693, 692, 691, 690, 689, 688, 687, 686,
+
+ 685, 684, 682, 681, 680, 679, 678, 676, 675, 674,
+ 673, 826, 672, 670, 669, 668, 667, 665, 664, 663,
+ 662, 661, 660, 659, 658, 657, 656, 655, 654, 652,
+ 651, 648, 647, 646, 826, 826, 826, 837, 837, 645,
+ 837, 837, 837, 644, 837, 837, 837, 837, 837, 642,
+ 837, 640, 639, 638, 636, 635, 634, 837, 837, 837,
+ 837, 837, 633, 632, 631, 630, 629, 628, 627, 626,
+ 625, 624, 623, 622, 621, 619, 618, 617, 616, 615,
+ 614, 613, 612, 611, 609, 607, 606, 604, 603, 601,
+ 600, 837, 599, 598, 596, 595, 594, 593, 592, 591,
+
+ 590, 588, 586, 584, 583, 581, 577, 576, 575, 574,
+ 573, 572, 571, 570, 837, 837, 837, 1301, 1301, 1301,
+ 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1302, 1302,
+ 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1303,
+ 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303,
+ 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305,
+ 1305, 1305, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306,
+ 1306, 1306, 1306, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
+ 1307, 1308, 569, 1308, 1308, 1308, 1308, 1308, 1308, 1309,
+
+ 568, 566, 565, 564, 1309, 1309, 1309, 1310, 1310, 1310,
+ 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1311, 562,
+ 1311, 561, 1311, 1311, 1311, 1311, 1312, 560, 1312, 1312,
+ 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1313, 559, 1313,
+ 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1314, 558,
+ 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1315,
+ 557, 1315, 1316, 1316, 1316, 556, 555, 1316, 1316, 554,
+ 1316, 1317, 553, 1317, 1317, 1317, 1317, 1317, 1317, 1319,
+ 552, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319,
+ 1320, 550, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
+
+ 1320, 1321, 549, 1321, 1321, 1321, 1321, 1321, 1321, 1321,
+ 1321, 1321, 1322, 548, 1322, 1322, 1322, 1322, 1322, 1322,
+ 1322, 1322, 1322, 546, 541, 540, 539, 538, 537, 536,
+ 535, 534, 533, 532, 531, 530, 529, 528, 527, 525,
+ 524, 523, 522, 520, 519, 518, 517, 516, 515, 514,
+ 513, 512, 511, 510, 509, 508, 507, 506, 505, 504,
+ 503, 502, 501, 500, 499, 498, 495, 494, 493, 492,
+ 491, 490, 489, 487, 486, 485, 484, 483, 482, 481,
+ 479, 475, 472, 471, 470, 469, 468, 467, 466, 465,
+ 464, 463, 462, 461, 460, 459, 458, 457, 456, 455,
+
+ 454, 453, 452, 451, 450, 449, 448, 447, 445, 444,
+ 443, 442, 441, 440, 439, 438, 436, 435, 434, 433,
+ 432, 431, 430, 429, 428, 427, 426, 425, 424, 423,
+ 422, 421, 420, 419, 418, 417, 411, 410, 407, 406,
+ 405, 404, 403, 402, 401, 400, 399, 398, 397, 396,
+ 395, 392, 390, 389, 388, 387, 386, 385, 384, 383,
+ 382, 381, 380, 379, 376, 364, 361, 360, 359, 358,
+ 357, 356, 355, 354, 353, 352, 350, 349, 348, 347,
+ 345, 341, 340, 339, 338, 336, 335, 334, 333, 331,
+ 330, 329, 325, 323, 322, 321, 320, 319, 318, 317,
+
+ 316, 314, 313, 312, 311, 310, 309, 308, 307, 306,
+ 305, 302, 301, 300, 296, 274, 273, 272, 271, 270,
+ 269, 268, 267, 266, 265, 264, 263, 262, 261, 259,
+ 258, 257, 256, 255, 254, 253, 251, 250, 249, 247,
+ 246, 244, 243, 242, 241, 240, 238, 237, 236, 235,
+ 234, 232, 231, 230, 228, 227, 226, 225, 224, 220,
+ 206, 204, 198, 192, 189, 187, 185, 184, 183, 174,
+ 172, 171, 170, 161, 156, 154, 152, 151, 149, 142,
+ 141, 140, 139, 138, 136, 130, 129, 115, 110, 105,
+ 104, 103, 94, 84, 83, 77, 76, 75, 69, 68,
+
+ 67, 66, 63, 62, 60, 54, 53, 52, 51, 42,
+ 34, 32, 31, 25, 24, 22, 19, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+ 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300
+
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+/* 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"
+#define INITIAL 0
+#line 2 "ldlex.l"
+
+/* Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+/*
+This was written by steve chamberlain
+ sac@cygnus.com
+*/
+
+
+#include <stdio.h>
+
+#include "bfd.h"
+#include "sysdep.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) yy_input (buf, &result, 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 void yy_input (char *, int *, 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
+#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
+
+#line 1422 "ldlex.c"
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines. This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#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 (void) 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->yy_is_interactive ) \
+ { \
+ int c = '*', 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
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL int yylex YY_PROTO(( void ))
+#endif
+
+/* 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
+
+YY_DECL
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 123 "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_defsym: return INPUT_DEFSYM; break;
+ default: abort ();
+ }
+ }
+
+#line 1602 "ldlex.c"
+
+ if ( yy_init )
+ {
+ yy_init = 0;
+
+#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 )
+ yy_current_buffer =
+ 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 >= 1301 )
+ 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] != 2218 );
+
+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 140 "ldlex.l"
+{ comment (); }
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 143 "ldlex.l"
+{ RTOKEN('-');}
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 144 "ldlex.l"
+{ RTOKEN('+');}
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 145 "ldlex.l"
+{ yylval.name = xstrdup (yytext); return NAME; }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 146 "ldlex.l"
+{ RTOKEN('='); }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 148 "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 154 "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 179 "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 208 "ldlex.l"
+{ RTOKEN(']');}
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 209 "ldlex.l"
+{ RTOKEN('[');}
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 210 "ldlex.l"
+{ RTOKEN(LSHIFTEQ);}
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 211 "ldlex.l"
+{ RTOKEN(RSHIFTEQ);}
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 212 "ldlex.l"
+{ RTOKEN(OROR);}
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 213 "ldlex.l"
+{ RTOKEN(EQ);}
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 214 "ldlex.l"
+{ RTOKEN(NE);}
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 215 "ldlex.l"
+{ RTOKEN(GE);}
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 216 "ldlex.l"
+{ RTOKEN(LE);}
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 217 "ldlex.l"
+{ RTOKEN(LSHIFT);}
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 218 "ldlex.l"
+{ RTOKEN(RSHIFT);}
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 219 "ldlex.l"
+{ RTOKEN(PLUSEQ);}
+ YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 220 "ldlex.l"
+{ RTOKEN(MINUSEQ);}
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 221 "ldlex.l"
+{ RTOKEN(MULTEQ);}
+ YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 222 "ldlex.l"
+{ RTOKEN(DIVEQ);}
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 223 "ldlex.l"
+{ RTOKEN(ANDEQ);}
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 224 "ldlex.l"
+{ RTOKEN(OREQ);}
+ YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 225 "ldlex.l"
+{ RTOKEN(ANDAND);}
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 226 "ldlex.l"
+{ RTOKEN('>');}
+ YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 227 "ldlex.l"
+{ RTOKEN(',');}
+ YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 228 "ldlex.l"
+{ RTOKEN('&');}
+ YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 229 "ldlex.l"
+{ RTOKEN('|');}
+ YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 230 "ldlex.l"
+{ RTOKEN('~');}
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 231 "ldlex.l"
+{ RTOKEN('!');}
+ YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 232 "ldlex.l"
+{ RTOKEN('?');}
+ YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 233 "ldlex.l"
+{ RTOKEN('*');}
+ YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 234 "ldlex.l"
+{ RTOKEN('+');}
+ YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 235 "ldlex.l"
+{ RTOKEN('-');}
+ YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 236 "ldlex.l"
+{ RTOKEN('/');}
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 237 "ldlex.l"
+{ RTOKEN('%');}
+ YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 238 "ldlex.l"
+{ RTOKEN('<');}
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 239 "ldlex.l"
+{ RTOKEN('=');}
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 240 "ldlex.l"
+{ RTOKEN('}') ; }
+ YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 241 "ldlex.l"
+{ RTOKEN('{'); }
+ YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 242 "ldlex.l"
+{ RTOKEN(')');}
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 243 "ldlex.l"
+{ RTOKEN('(');}
+ YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 244 "ldlex.l"
+{ RTOKEN(':'); }
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 245 "ldlex.l"
+{ RTOKEN(';');}
+ YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 246 "ldlex.l"
+{ RTOKEN(MEMORY);}
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 247 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 248 "ldlex.l"
+{ RTOKEN(VERSIONK);}
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 249 "ldlex.l"
+{ RTOKEN(BLOCK);}
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 250 "ldlex.l"
+{ RTOKEN(BIND);}
+ YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 251 "ldlex.l"
+{ RTOKEN(LENGTH);}
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 252 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 253 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_ALIGN);}
+ YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 254 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_RELRO_END);}
+ YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 255 "ldlex.l"
+{ RTOKEN(DATA_SEGMENT_END);}
+ YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 256 "ldlex.l"
+{ RTOKEN(ADDR);}
+ YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 257 "ldlex.l"
+{ RTOKEN(LOADADDR);}
+ YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 258 "ldlex.l"
+{ RTOKEN(MAX_K); }
+ YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 259 "ldlex.l"
+{ RTOKEN(MIN_K); }
+ YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 260 "ldlex.l"
+{ RTOKEN(ASSERT_K); }
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 261 "ldlex.l"
+{ RTOKEN(ENTRY);}
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 262 "ldlex.l"
+{ RTOKEN(EXTERN);}
+ YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 263 "ldlex.l"
+{ RTOKEN(NEXT);}
+ YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 264 "ldlex.l"
+{ RTOKEN(SIZEOF_HEADERS);}
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 265 "ldlex.l"
+{ RTOKEN(SIZEOF_HEADERS);}
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 266 "ldlex.l"
+{ RTOKEN(SEGMENT_START);}
+ YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 267 "ldlex.l"
+{ RTOKEN(MAP);}
+ YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 268 "ldlex.l"
+{ RTOKEN(SIZEOF);}
+ YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 269 "ldlex.l"
+{ RTOKEN(TARGET_K);}
+ YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 270 "ldlex.l"
+{ RTOKEN(SEARCH_DIR);}
+ YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 271 "ldlex.l"
+{ RTOKEN(OUTPUT);}
+ YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 272 "ldlex.l"
+{ RTOKEN(INPUT);}
+ YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 273 "ldlex.l"
+{ RTOKEN(GROUP);}
+ YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 274 "ldlex.l"
+{ RTOKEN(AS_NEEDED);}
+ YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 275 "ldlex.l"
+{ RTOKEN(DEFINED);}
+ YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 276 "ldlex.l"
+{ RTOKEN(CREATE_OBJECT_SYMBOLS);}
+ YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 277 "ldlex.l"
+{ RTOKEN( CONSTRUCTORS);}
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 278 "ldlex.l"
+{ RTOKEN(FORCE_COMMON_ALLOCATION);}
+ YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 279 "ldlex.l"
+{ RTOKEN(INHIBIT_COMMON_ALLOCATION);}
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 280 "ldlex.l"
+{ RTOKEN(SECTIONS);}
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 281 "ldlex.l"
+{ RTOKEN(FILL);}
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 282 "ldlex.l"
+{ RTOKEN(STARTUP);}
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 283 "ldlex.l"
+{ RTOKEN(OUTPUT_FORMAT);}
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 284 "ldlex.l"
+{ RTOKEN( OUTPUT_ARCH);}
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 285 "ldlex.l"
+{ RTOKEN(HLL);}
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 286 "ldlex.l"
+{ RTOKEN(SYSLIB);}
+ YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 287 "ldlex.l"
+{ RTOKEN(FLOAT);}
+ YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 288 "ldlex.l"
+{ RTOKEN( QUAD);}
+ YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 289 "ldlex.l"
+{ RTOKEN( SQUAD);}
+ YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 290 "ldlex.l"
+{ RTOKEN( LONG);}
+ YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 291 "ldlex.l"
+{ RTOKEN( SHORT);}
+ YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 292 "ldlex.l"
+{ RTOKEN( BYTE);}
+ YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 293 "ldlex.l"
+{ RTOKEN(NOFLOAT);}
+ YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 294 "ldlex.l"
+{ RTOKEN(NOCROSSREFS);}
+ YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 295 "ldlex.l"
+{ RTOKEN(OVERLAY); }
+ YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 296 "ldlex.l"
+{ RTOKEN(SORT_BY_NAME); }
+ YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 297 "ldlex.l"
+{ RTOKEN(SORT_BY_ALIGNMENT); }
+ YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 298 "ldlex.l"
+{ RTOKEN(SORT_BY_NAME); }
+ YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 299 "ldlex.l"
+{ RTOKEN(NOLOAD);}
+ YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 300 "ldlex.l"
+{ RTOKEN(DSECT);}
+ YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 301 "ldlex.l"
+{ RTOKEN(COPY);}
+ YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 302 "ldlex.l"
+{ RTOKEN(INFO);}
+ YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 303 "ldlex.l"
+{ RTOKEN(OVERLAY);}
+ YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 304 "ldlex.l"
+{ RTOKEN(ONLY_IF_RO); }
+ YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 305 "ldlex.l"
+{ RTOKEN(ONLY_IF_RW); }
+ YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 306 "ldlex.l"
+{ RTOKEN(SPECIAL); }
+ YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 307 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 308 "ldlex.l"
+{ RTOKEN(ORIGIN);}
+ YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 309 "ldlex.l"
+{ RTOKEN( LENGTH);}
+ YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 310 "ldlex.l"
+{ RTOKEN( LENGTH);}
+ YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 311 "ldlex.l"
+{ RTOKEN(INCLUDE);}
+ YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 312 "ldlex.l"
+{ RTOKEN (PHDRS); }
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 313 "ldlex.l"
+{ RTOKEN(AT);}
+ YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 314 "ldlex.l"
+{ RTOKEN(SUBALIGN);}
+ YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 315 "ldlex.l"
+{ RTOKEN(PROVIDE); }
+ YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 316 "ldlex.l"
+{ RTOKEN(PROVIDE_HIDDEN); }
+ YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 317 "ldlex.l"
+{ RTOKEN(KEEP); }
+ YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 318 "ldlex.l"
+{ RTOKEN(EXCLUDE_FILE); }
+ YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 319 "ldlex.l"
+{ ++ lineno; }
+ YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 320 "ldlex.l"
+{ ++ lineno; RTOKEN(NEWLINE); }
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 321 "ldlex.l"
+{ /* Mri comment line */ }
+ YY_BREAK
+case 123:
+YY_RULE_SETUP
+#line 322 "ldlex.l"
+{ /* Mri comment line */ }
+ YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 323 "ldlex.l"
+{ RTOKEN(ENDWORD); }
+ YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 324 "ldlex.l"
+{ RTOKEN(ALIGNMOD);}
+ YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 325 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 127:
+YY_RULE_SETUP
+#line 326 "ldlex.l"
+{ RTOKEN(CHIP); }
+ YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 327 "ldlex.l"
+{ RTOKEN(BASE); }
+ YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 328 "ldlex.l"
+{ RTOKEN(ALIAS); }
+ YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 329 "ldlex.l"
+{ RTOKEN(TRUNCATE); }
+ YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 330 "ldlex.l"
+{ RTOKEN(LOAD); }
+ YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 331 "ldlex.l"
+{ RTOKEN(PUBLIC); }
+ YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 332 "ldlex.l"
+{ RTOKEN(ORDER); }
+ YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 333 "ldlex.l"
+{ RTOKEN(NAMEWORD); }
+ YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 334 "ldlex.l"
+{ RTOKEN(FORMAT); }
+ YY_BREAK
+case 136:
+YY_RULE_SETUP
+#line 335 "ldlex.l"
+{ RTOKEN(CASE); }
+ YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 336 "ldlex.l"
+{ RTOKEN(START); }
+ YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 337 "ldlex.l"
+{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
+ YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 338 "ldlex.l"
+{ RTOKEN(SECT); }
+ YY_BREAK
+case 140:
+YY_RULE_SETUP
+#line 339 "ldlex.l"
+{ RTOKEN(ABSOLUTE); }
+ YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 340 "ldlex.l"
+{ RTOKEN(ENDWORD); }
+ YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 341 "ldlex.l"
+{ RTOKEN(ALIGNMOD);}
+ YY_BREAK
+case 143:
+YY_RULE_SETUP
+#line 342 "ldlex.l"
+{ RTOKEN(ALIGN_K);}
+ YY_BREAK
+case 144:
+YY_RULE_SETUP
+#line 343 "ldlex.l"
+{ RTOKEN(CHIP); }
+ YY_BREAK
+case 145:
+YY_RULE_SETUP
+#line 344 "ldlex.l"
+{ RTOKEN(BASE); }
+ YY_BREAK
+case 146:
+YY_RULE_SETUP
+#line 345 "ldlex.l"
+{ RTOKEN(ALIAS); }
+ YY_BREAK
+case 147:
+YY_RULE_SETUP
+#line 346 "ldlex.l"
+{ RTOKEN(TRUNCATE); }
+ YY_BREAK
+case 148:
+YY_RULE_SETUP
+#line 347 "ldlex.l"
+{ RTOKEN(LOAD); }
+ YY_BREAK
+case 149:
+YY_RULE_SETUP
+#line 348 "ldlex.l"
+{ RTOKEN(PUBLIC); }
+ YY_BREAK
+case 150:
+YY_RULE_SETUP
+#line 349 "ldlex.l"
+{ RTOKEN(ORDER); }
+ YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 350 "ldlex.l"
+{ RTOKEN(NAMEWORD); }
+ YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 351 "ldlex.l"
+{ RTOKEN(FORMAT); }
+ YY_BREAK
+case 153:
+YY_RULE_SETUP
+#line 352 "ldlex.l"
+{ RTOKEN(CASE); }
+ YY_BREAK
+case 154:
+YY_RULE_SETUP
+#line 353 "ldlex.l"
+{ RTOKEN(EXTERN); }
+ YY_BREAK
+case 155:
+YY_RULE_SETUP
+#line 354 "ldlex.l"
+{ RTOKEN(START); }
+ YY_BREAK
+case 156:
+YY_RULE_SETUP
+#line 355 "ldlex.l"
+{ RTOKEN(LIST); /* LIST and ignore to end of line */ }
+ YY_BREAK
+case 157:
+YY_RULE_SETUP
+#line 356 "ldlex.l"
+{ RTOKEN(SECT); }
+ YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 357 "ldlex.l"
+{ RTOKEN(ABSOLUTE); }
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 359 "ldlex.l"
+{
+/* Filename without commas, needed to parse mri stuff */
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 160:
+YY_RULE_SETUP
+#line 366 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 161:
+YY_RULE_SETUP
+#line 370 "ldlex.l"
+{
+ yylval.name = xstrdup (yytext + 2);
+ return LNAME;
+ }
+ YY_BREAK
+case 162:
+YY_RULE_SETUP
+#line 374 "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 163:
+YY_RULE_SETUP
+#line 391 "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 164:
+YY_RULE_SETUP
+#line 398 "ldlex.l"
+{ lineno++;}
+ YY_BREAK
+case 165:
+YY_RULE_SETUP
+#line 399 "ldlex.l"
+{ }
+ YY_BREAK
+case 166:
+YY_RULE_SETUP
+#line 401 "ldlex.l"
+{ return *yytext; }
+ YY_BREAK
+case 167:
+YY_RULE_SETUP
+#line 403 "ldlex.l"
+{ RTOKEN(GLOBAL); }
+ YY_BREAK
+case 168:
+YY_RULE_SETUP
+#line 405 "ldlex.l"
+{ RTOKEN(LOCAL); }
+ YY_BREAK
+case 169:
+YY_RULE_SETUP
+#line 407 "ldlex.l"
+{ RTOKEN(EXTERN); }
+ YY_BREAK
+case 170:
+YY_RULE_SETUP
+#line 409 "ldlex.l"
+{ yylval.name = xstrdup (yytext);
+ return VERS_IDENTIFIER; }
+ YY_BREAK
+case 171:
+YY_RULE_SETUP
+#line 412 "ldlex.l"
+{ yylval.name = xstrdup (yytext);
+ return VERS_TAG; }
+ YY_BREAK
+case 172:
+YY_RULE_SETUP
+#line 415 "ldlex.l"
+{ BEGIN(VERS_SCRIPT); return *yytext; }
+ YY_BREAK
+case 173:
+YY_RULE_SETUP
+#line 417 "ldlex.l"
+{ BEGIN(VERS_NODE);
+ vers_node_nesting = 0;
+ return *yytext;
+ }
+ YY_BREAK
+case 174:
+YY_RULE_SETUP
+#line 421 "ldlex.l"
+{ return *yytext; }
+ YY_BREAK
+case 175:
+YY_RULE_SETUP
+#line 422 "ldlex.l"
+{ vers_node_nesting++; return *yytext; }
+ YY_BREAK
+case 176:
+YY_RULE_SETUP
+#line 423 "ldlex.l"
+{ if (--vers_node_nesting < 0)
+ BEGIN(VERS_SCRIPT);
+ return *yytext;
+ }
+ YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 428 "ldlex.l"
+{ lineno++; }
+ YY_BREAK
+case 178:
+YY_RULE_SETUP
+#line 430 "ldlex.l"
+{ /* Eat up comments */ }
+ YY_BREAK
+case 179:
+YY_RULE_SETUP
+#line 432 "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 434 "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 180:
+YY_RULE_SETUP
+#line 452 "ldlex.l"
+lex_warn_invalid (" in script", yytext);
+ YY_BREAK
+case 181:
+YY_RULE_SETUP
+#line 453 "ldlex.l"
+lex_warn_invalid (" in expression", yytext);
+ YY_BREAK
+case 182:
+YY_RULE_SETUP
+#line 455 "ldlex.l"
+ECHO;
+ YY_BREAK
+#line 2718 "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->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->yy_n_chars;
+ yy_current_buffer->yy_input_file = yyin;
+ yy_current_buffer->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->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->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()
+ {
+ register char *dest = yy_current_buffer->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->yy_ch_buf[yy_n_chars + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( yy_current_buffer->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->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->yy_n_chars = yy_n_chars = 0;
+
+ else
+ {
+ int num_to_read =
+ yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+ YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+ /* 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 )
+ {
+ int 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. */
+ yy_flex_realloc( (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->yy_buf_size -
+ number_to_move - 1;
+#endif
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+ yy_n_chars, num_to_read );
+
+ yy_current_buffer->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->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ yy_n_chars += number_to_move;
+ yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+ yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+ yytext_ptr = &yy_current_buffer->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()
+ {
+ 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 >= 1301 )
+ 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 );
+ */
+
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+ {
+ 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 >= 1301 )
+ 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 == 1300);
+
+ return yy_is_jam ? 0 : yy_current_state;
+ }
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+ {
+ register char *yy_cp = yy_c_buf_p;
+
+ /* undo effects of setting up yytext */
+ *yy_cp = yy_hold_char;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register int number_to_move = yy_n_chars + 2;
+ register char *dest = &yy_current_buffer->yy_ch_buf[
+ yy_current_buffer->yy_buf_size + 2];
+ register char *source =
+ &yy_current_buffer->yy_ch_buf[number_to_move];
+
+ while ( source > yy_current_buffer->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ yy_current_buffer->yy_n_chars =
+ yy_n_chars = yy_current_buffer->yy_buf_size;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+
+ yytext_ptr = yy_bp;
+ yy_hold_char = *yy_cp;
+ yy_c_buf_p = yy_cp;
+ }
+#endif /* ifndef YY_NO_UNPUT */
+
+
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#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->yy_ch_buf[yy_n_chars] )
+ /* This was really a NUL. */
+ *yy_c_buf_p = '\0';
+
+ else
+ { /* need more input */
+ int 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 );
+
+ /* fall through */
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap() )
+ return EOF;
+
+ 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;
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+ {
+ if ( ! yy_current_buffer )
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+ yy_init_buffer( yy_current_buffer, input_file );
+ yy_load_buffer_state();
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+ {
+ 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->yy_buf_pos = yy_c_buf_p;
+ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ yy_current_buffer = 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;
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+ {
+ yy_n_chars = yy_current_buffer->yy_n_chars;
+ yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+ yyin = yy_current_buffer->yy_input_file;
+ yy_hold_char = *yy_c_buf_p;
+ }
+
+
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+ {
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yy_flex_alloc( 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 *) yy_flex_alloc( 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;
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+ {
+ if ( ! b )
+ return;
+
+ if ( b == yy_current_buffer )
+ yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yy_flex_free( (void *) b->yy_ch_buf );
+
+ yy_flex_free( (void *) b );
+ }
+
+
+#ifndef _WIN32
+#include <unistd.h>
+#else
+#ifndef YY_ALWAYS_INTERACTIVE
+#ifndef YY_NEVER_INTERACTIVE
+extern int isatty YY_PROTO(( int ));
+#endif
+#endif
+#endif
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+
+ {
+ yy_flush_buffer( b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+#if YY_ALWAYS_INTERACTIVE
+ b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+ b->yy_is_interactive = 0;
+#else
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+ }
+
+
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+ {
+ 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();
+ }
+
+
+#ifndef YY_NO_SCAN_BUFFER
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+ {
+ 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) yy_flex_alloc( 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;
+ }
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+ {
+ int len;
+ for ( len = 0; yy_str[len]; ++len )
+ ;
+
+ return yy_scan_bytes( yy_str, len );
+ }
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+ {
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = len + 2;
+ buf = (char *) yy_flex_alloc( n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < len; ++i )
+ buf[i] = bytes[i];
+
+ buf[len] = buf[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;
+ }
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+ {
+ if ( yy_start_stack_ptr >= yy_start_stack_depth )
+ {
+ yy_size_t new_size;
+
+ yy_start_stack_depth += YY_START_STACK_INCR;
+ new_size = yy_start_stack_depth * sizeof( int );
+
+ if ( ! yy_start_stack )
+ yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+ else
+ yy_start_stack = (int *) yy_flex_realloc(
+ (void *) yy_start_stack, new_size );
+
+ if ( ! yy_start_stack )
+ YY_FATAL_ERROR(
+ "out of memory expanding start-condition stack" );
+ }
+
+ yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+ BEGIN(new_state);
+ }
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state()
+ {
+ if ( --yy_start_stack_ptr < 0 )
+ YY_FATAL_ERROR( "start-condition stack underflow" );
+
+ BEGIN(yy_start_stack[yy_start_stack_ptr]);
+ }
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state()
+ {
+ return yy_start_stack[yy_start_stack_ptr - 1];
+ }
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+ {
+ (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. */ \
+ yytext[yyleng] = yy_hold_char; \
+ yy_c_buf_p = yytext + n; \
+ yy_hold_char = *yy_c_buf_p; \
+ *yy_c_buf_p = '\0'; \
+ yyleng = n; \
+ } \
+ while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+ {
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+ }
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+ {
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+ }
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+ {
+ return (void *) malloc( size );
+ }
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+ {
+ /* 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 );
+ }
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+ {
+ free( ptr );
+ }
+
+#if YY_MAIN
+int main()
+ {
+ yylex();
+ return 0;
+ }
+#endif
+#line 455 "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 in *RESULT
+ either the number of characters read, or 0 to indicate EOF. */
+
+static void
+yy_input (char *buf, int *result, int max_size)
+{
+ *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");
+ }
+ }
+}
+
+/* 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.17/ld/ldlex.h b/binutils-2.17/ld/ldlex.h
new file mode 100644
index 00000000..d35ead6a
--- /dev/null
+++ b/binutils-2.17/ld/ldlex.h
@@ -0,0 +1,63 @@
+/* ldlex.h -
+ Copyright 1991, 1992, 1993, 1994, 1995, 1997, 2000, 2003
+ Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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 1, or (at your option)
+ any later version.
+
+ GLD 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 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_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.17/ld/ldlex.l b/binutils-2.17/ld/ldlex.l
new file mode 100644
index 00000000..56ec3916
--- /dev/null
+++ b/binutils-2.17/ld/ldlex.l
@@ -0,0 +1,682 @@
+%{
+
+/* Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+/*
+This was written by steve chamberlain
+ sac@cygnus.com
+*/
+
+
+#include <stdio.h>
+
+#include "bfd.h"
+#include "sysdep.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) yy_input (buf, &result, 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 void yy_input (char *, int *, 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_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,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>"MAX" { RTOKEN(MAX_K); }
+<EXPRESSION,BOTH>"MIN" { RTOKEN(MIN_K); }
+<EXPRESSION,BOTH>"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>"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);}
+<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); }
+<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,EXPRESSION>{FILENAMECHAR1}{FILENAMECHAR}* {
+ yylval.name = xstrdup (yytext);
+ return NAME;
+ }
+<BOTH,EXPRESSION>"-l"{FILENAMECHAR}+ {
+ 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 in *RESULT
+ either the number of characters read, or 0 to indicate EOF. */
+
+static void
+yy_input (char *buf, int *result, int max_size)
+{
+ *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");
+ }
+ }
+}
+
+/* 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.17/ld/ldmain.c b/binutils-2.17/ld/ldmain.c
new file mode 100644
index 00000000..db87a40b
--- /dev/null
+++ b/binutils-2.17/ld/ldmain.c
@@ -0,0 +1,1528 @@
+/* Main program of GNU linker.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain steve@cygnus.com
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include <stdio.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"
+
+/* 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 */
+
+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;
+
+/* The file that we're creating. */
+bfd *output_bfd = 0;
+
+/* 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;
+
+/* Nonzero means create DT_NEEDED entries only if a dynamic library
+ actually satisfies some reference in a regular object. */
+bfd_boolean as_needed;
+
+/* Nonzero means never create DT_NEEDED entries for dynamic libraries
+ in DT_NEEDED tags. */
+bfd_boolean add_needed = 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 void set_scripts_dir
+ (void);
+static bfd_boolean add_archive_element
+ (struct bfd_link_info *, bfd *, const char *);
+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
+};
+
+struct bfd_link_info link_info;
+
+static void
+remove_output (void)
+{
+ if (output_filename)
+ {
+ if (output_bfd)
+ bfd_cache_close (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
+
+ /* Initialize the data about options. */
+ trace_files = trace_file_tries = version_printed = FALSE;
+ whole_archive = FALSE;
+ config.build_constructors = TRUE;
+ config.dynamic_link = FALSE;
+ config.has_shared = FALSE;
+ config.split_by_reloc = (unsigned) -1;
+ config.split_by_file = (bfd_size_type) -1;
+ config.hash_table_size = 0;
+ command_line.force_common_definition = FALSE;
+ command_line.inhibit_common_definition = FALSE;
+ command_line.interpreter = NULL;
+ command_line.rpath = NULL;
+ command_line.warn_mismatch = TRUE;
+ command_line.check_section_addresses = TRUE;
+ command_line.accept_unknown_input_arch = FALSE;
+ command_line.reduce_memory_overheads = FALSE;
+
+ sort_section = none;
+
+ /* 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.relocatable = FALSE;
+ link_info.emitrelocations = FALSE;
+ link_info.task_link = FALSE;
+ link_info.shared = FALSE;
+ link_info.pie = FALSE;
+ link_info.executable = FALSE;
+ link_info.symbolic = FALSE;
+ link_info.export_dynamic = FALSE;
+ link_info.static_link = FALSE;
+ link_info.traditional_format = FALSE;
+ link_info.optimize = FALSE;
+ link_info.unresolved_syms_in_objects = RM_NOT_YET_SET;
+ link_info.unresolved_syms_in_shared_libs = RM_NOT_YET_SET;
+ link_info.allow_multiple_definition = FALSE;
+ link_info.allow_undefined_version = TRUE;
+ link_info.create_default_symver = FALSE;
+ link_info.default_imported_symver = FALSE;
+ link_info.keep_memory = TRUE;
+ link_info.notice_all = FALSE;
+ link_info.nocopyreloc = FALSE;
+ link_info.new_dtags = FALSE;
+ link_info.combreloc = TRUE;
+ link_info.eh_frame_hdr = FALSE;
+ link_info.relro = FALSE;
+ link_info.strip_discarded = TRUE;
+ link_info.strip = strip_none;
+ link_info.discard = discard_sec_merge;
+ link_info.common_skip_ar_aymbols = bfd_link_common_skip_none;
+ link_info.callbacks = &link_callbacks;
+ link_info.hash = NULL;
+ link_info.keep_hash = NULL;
+ link_info.notice_hash = NULL;
+ link_info.wrap_hash = NULL;
+ link_info.input_bfds = NULL;
+ link_info.create_object_symbols_section = NULL;
+ link_info.gc_sym_list = NULL;
+ link_info.base_file = NULL;
+ /* 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.pei386_auto_import = -1;
+ link_info.pei386_runtime_pseudo_reloc = FALSE;
+ link_info.spare_dynamic_tags = 5;
+ link_info.flags = 0;
+ link_info.flags_1 = 0;
+ link_info.relax_pass = 1;
+ link_info.warn_shared_textrel = FALSE;
+ link_info.gc_sections = FALSE;
+
+ ldfile_add_arch ("");
+
+ config.make_executable = TRUE;
+ force_make_executable = FALSE;
+ config.magic_demand_paged = TRUE;
+ config.text_read_only = TRUE;
+
+ emulation = get_emulation (argc, argv);
+ ldemul_choose_mode (emulation);
+ default_target = ldemul_choose_target (argc, argv);
+ 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 (link_info.gc_sections)
+ einfo ("%P%F: --gc-sections and -r may not be used together\n");
+ else if (command_line.relax)
+ einfo (_("%P%F: --relax and -r may not be used together\n"));
+ if (link_info.shared)
+ einfo (_("%P%F: -r and -shared may not be used together\n"));
+ }
+
+ 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;
+ }
+
+ /* This essentially adds another -L directory so this must be done after
+ the -L's in argv have been processed. */
+ set_scripts_dir ();
+
+ /* 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_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 = 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)
+ output_bfd->flags &= ~EXEC_P;
+ else
+ 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 ();
+
+ /* 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 (output_bfd))
+ einfo (_("%F%B: final close failed: %E\n"), 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 = xmalloc (bsize);
+ int l;
+ char *dst_name = 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 = 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 (strncmp (argv[i], "--sysroot=", strlen ("--sysroot=")) == 0)
+ 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 (!strncmp (argv[i], "-m", 2))
+ {
+ 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;
+}
+
+/* If directory DIR contains an "ldscripts" subdirectory,
+ add DIR to the library search path and return TRUE,
+ else return FALSE. */
+
+static bfd_boolean
+check_for_scripts_dir (char *dir)
+{
+ size_t dirlen;
+ char *buf;
+ struct stat s;
+ bfd_boolean res;
+
+ dirlen = strlen (dir);
+ /* sizeof counts the terminating NUL. */
+ buf = xmalloc (dirlen + sizeof ("/ldscripts"));
+ sprintf (buf, "%s/ldscripts", dir);
+
+ res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
+ free (buf);
+ if (res)
+ ldfile_add_library_path (dir, FALSE);
+ return res;
+}
+
+/* Set the default directory for finding script files.
+ Libraries will be searched for here too, but that's ok.
+ We look for the "ldscripts" directory in:
+
+ SCRIPTDIR (passed from Makefile)
+ (adjusted according to the current location of the binary)
+ SCRIPTDIR (passed from Makefile)
+ the dir where this program is (for using it from the build tree)
+ the dir where this program is/../lib
+ (for installing the tool suite elsewhere). */
+
+static void
+set_scripts_dir (void)
+{
+ char *end, *dir;
+ size_t dirlen;
+ bfd_boolean found;
+
+ dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
+ if (dir)
+ {
+ found = check_for_scripts_dir (dir);
+ free (dir);
+ if (found)
+ return;
+ }
+
+ dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
+ if (dir)
+ {
+ found = check_for_scripts_dir (dir);
+ free (dir);
+ if (found)
+ return;
+ }
+
+ if (check_for_scripts_dir (SCRIPTDIR))
+ /* We've been installed normally. */
+ return;
+
+ /* Look for "ldscripts" in the dir where our binary is. */
+ end = strrchr (program_name, '/');
+#ifdef HAVE_DOS_BASED_FILE_SYSTEM
+ {
+ /* We could have \foo\bar, or /foo\bar. */
+ char *bslash = strrchr (program_name, '\\');
+
+ if (end == NULL || (bslash != NULL && bslash > end))
+ end = bslash;
+ }
+#endif
+
+ if (end == NULL)
+ /* Don't look for ldscripts in the current directory. There is
+ too much potential for confusion. */
+ return;
+
+ dirlen = end - program_name;
+ /* Make a copy of program_name in dir.
+ Leave room for later "/../lib". */
+ dir = xmalloc (dirlen + 8);
+ strncpy (dir, program_name, dirlen);
+ dir[dirlen] = '\0';
+
+ if (check_for_scripts_dir (dir))
+ {
+ free (dir);
+ return;
+ }
+
+ /* Look for "ldscripts" in <the dir where our binary is>/../lib. */
+ strcpy (dir + dirlen, "/../lib");
+ check_for_scripts_dir (dir);
+ free (dir);
+}
+
+void
+add_ysym (const char *name)
+{
+ if (link_info.notice_hash == NULL)
+ {
+ link_info.notice_hash = 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 = 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 = 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 = 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 = 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)
+{
+ lang_input_statement_type *input;
+
+ input = xmalloc (sizeof (lang_input_statement_type));
+ input->filename = abfd->filename;
+ input->local_sym_name = abfd->filename;
+ input->the_bfd = abfd;
+ input->asymbols = NULL;
+ input->next = NULL;
+ input->just_syms_flag = FALSE;
+ input->loaded = FALSE;
+ input->search_dirs_flag = FALSE;
+
+ /* FIXME: The following fields are not set: header.next,
+ header.type, closed, passive_position, symbol_count,
+ next_real_file, is_archive, target, real. This bit of code is
+ from the old decode_library_subfile function. I don't know
+ whether any of those fields matters. */
+
+ 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", 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)
+{
+ /* 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 (command_line.relax)
+ {
+ einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
+ command_line.relax = 0;
+ }
+
+ 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 (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
+ {
+ lang_input_statement_type *entry;
+ asymbol **asymbols;
+ struct warning_callback_info info;
+
+ /* Look through the relocs to see if we can find a plausible
+ address. */
+ entry = (lang_input_statement_type *) abfd->usrdata;
+ if (entry != NULL && entry->asymbols != NULL)
+ asymbols = entry->asymbols;
+ else
+ {
+ long symsize;
+ long symbol_count;
+
+ symsize = bfd_get_symtab_upper_bound (abfd);
+ if (symsize < 0)
+ einfo (_("%B%F: could not read symbols: %E\n"), abfd);
+ asymbols = xmalloc (symsize);
+ symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
+ if (symbol_count < 0)
+ einfo (_("%B%F: could not read symbols: %E\n"), abfd);
+ if (entry != NULL)
+ {
+ entry->asymbols = asymbols;
+ entry->symbol_count = symbol_count;
+ }
+ }
+
+ info.found = FALSE;
+ info.warning = warning;
+ info.symbol = symbol;
+ info.asymbols = asymbols;
+ bfd_map_over_sections (abfd, warning_find_reloc, &info);
+
+ if (! info.found)
+ einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
+
+ if (entry == NULL)
+ free (asymbols);
+ }
+
+ 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 = 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 = 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 = 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
+ ? 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. */
+
+static bfd_boolean
+notice (struct bfd_link_info *info,
+ const char *name,
+ bfd *abfd,
+ asection *section,
+ bfd_vma value)
+{
+ if (! info->notice_all
+ || (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.17/ld/ldmain.h b/binutils-2.17/ld/ldmain.h
new file mode 100644
index 00000000..4f15d55b
--- /dev/null
+++ b/binutils-2.17/ld/ldmain.h
@@ -0,0 +1,47 @@
+/* ldmain.h -
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2002, 2003, 2004,
+ 2005 Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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 1, or (at your option)
+ any later version.
+
+ GLD 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 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 bfd *output_bfd;
+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 as_needed;
+extern bfd_boolean add_needed;
+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.17/ld/ldmisc.c b/binutils-2.17/ld/ldmisc.c
new file mode 100644
index 00000000..8af043aa
--- /dev/null
+++ b/binutils-2.17/ld/ldmisc.c
@@ -0,0 +1,560 @@
+/* ldmisc.c
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005, 2006
+ Free Software Foundation, Inc.
+ Written by Steve Chamberlain of Cygnus Support.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+#include "bfd.h"
+#include "bfdlink.h"
+#include "sysdep.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
+ %s arbitrary string, like printf
+ %u integer, like printf
+ %v hex bfd_vma, no leading zeros
+*/
+
+static 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"));
+ else if (! demangling)
+ fprintf (fp, "%s", name);
+ else
+ {
+ char *demangled;
+
+ demangled = demangle (name);
+ fprintf (fp, "%s", demangled);
+ free (demangled);
+ }
+ }
+ 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;
+ lang_input_statement_type *entry;
+ asymbol **asymbols;
+ 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)
+ {
+ entry = NULL;
+ asymbols = NULL;
+ }
+ else
+ {
+ entry = (lang_input_statement_type *) abfd->usrdata;
+ if (entry != (lang_input_statement_type *) NULL
+ && entry->asymbols != (asymbol **) NULL)
+ asymbols = entry->asymbols;
+ else
+ {
+ long symsize;
+ long sym_count;
+
+ symsize = bfd_get_symtab_upper_bound (abfd);
+ if (symsize < 0)
+ einfo (_("%B%F: could not read symbols\n"), abfd);
+ asymbols = xmalloc (symsize);
+ sym_count = bfd_canonicalize_symtab (abfd, asymbols);
+ if (sym_count < 0)
+ einfo (_("%B%F: could not read symbols\n"), abfd);
+ if (entry != (lang_input_statement_type *) NULL)
+ {
+ entry->asymbols = asymbols;
+ entry->symbol_count = sym_count;
+ }
+ }
+ }
+
+ /* 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 (asymbols != NULL && entry == NULL)
+ free (asymbols);
+
+ 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 '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);
+}
+
+/* Wrapper around cplus_demangle. Strips leading underscores and
+ other such chars that would otherwise confuse the demangler. */
+
+char *
+demangle (const char *name)
+{
+ char *res;
+ const char *p;
+
+ if (output_bfd != NULL
+ && bfd_get_symbol_leading_char (output_bfd) == name[0])
+ ++name;
+
+ /* This is a hack for better error reporting on XCOFF, PowerPC64-ELF
+ or the MS PE format. These formats have a number of leading '.'s
+ on at least some symbols, so we remove all dots to avoid
+ confusing the demangler. */
+ p = name;
+ while (*p == '.')
+ ++p;
+
+ res = cplus_demangle (p, DMGL_ANSI | DMGL_PARAMS);
+ if (res)
+ {
+ size_t dots = p - name;
+
+ /* Now put back any stripped dots. */
+ if (dots != 0)
+ {
+ size_t len = strlen (res) + 1;
+ char *add_dots = xmalloc (len + dots);
+
+ memcpy (add_dots, name, dots);
+ memcpy (add_dots + dots, res, len);
+ free (res);
+ res = add_dots;
+ }
+ return res;
+ }
+ return xstrdup (name);
+}
+
+/* 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, ...)
+{
+ 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.17/ld/ldmisc.h b/binutils-2.17/ld/ldmisc.h
new file mode 100644
index 00000000..cf704335
--- /dev/null
+++ b/binutils-2.17/ld/ldmisc.h
@@ -0,0 +1,45 @@
+/* ldmisc.h -
+ Copyright 1991, 1992, 1993, 1994, 1996, 1997, 2001, 2003, 2004
+ Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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 LDMISC_H
+#define LDMISC_H
+
+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);
+extern char *demangle (const char *);
+
+#endif
diff --git a/binutils-2.17/ld/ldver.c b/binutils-2.17/ld/ldver.c
new file mode 100644
index 00000000..48b91435
--- /dev/null
+++ b/binutils-2.17/ld/ldver.c
@@ -0,0 +1,59 @@
+/* ldver.c -- Print linker version.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002,
+ 2003 Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <stdio.h>
+#include "bfd.h"
+#include "bfdver.h"
+#include "sysdep.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 version %s\n"), BFD_VERSION_STRING);
+
+ if (noisy & 2)
+ {
+ printf (_("Copyright 2005 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. 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.17/ld/ldver.h b/binutils-2.17/ld/ldver.h
new file mode 100644
index 00000000..96e74ce6
--- /dev/null
+++ b/binutils-2.17/ld/ldver.h
@@ -0,0 +1,21 @@
+/* ldver.h -- Header file for ldver.c.
+ Copyright 1991, 1992, 1993, 1996, 2001, 2003
+ Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+void ldversion (int);
diff --git a/binutils-2.17/ld/ldver.texi b/binutils-2.17/ld/ldver.texi
new file mode 100644
index 00000000..11d1801d
--- /dev/null
+++ b/binutils-2.17/ld/ldver.texi
@@ -0,0 +1 @@
+@set VERSION 2.17
diff --git a/binutils-2.17/ld/ldwrite.c b/binutils-2.17/ld/ldwrite.c
new file mode 100644
index 00000000..ee9d74a7
--- /dev/null
+++ b/binutils-2.17/ld/ldwrite.c
@@ -0,0 +1,568 @@
+/* ldwrite.c -- write out the linked file
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002,
+ 2003, 2004, 2005 Free Software Foundation, Inc.
+ Written by Steve Chamberlain sac@cygnus.com
+
+This file is part of GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "bfd.h"
+#include "sysdep.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 == output_bfd);
+
+ link_order = bfd_new_link_order (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 = 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 (output_bfd))
+ big_endian = TRUE;
+ else if (bfd_little_endian (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 == output_bfd);
+ switch (statement->data_statement.type)
+ {
+ case QUAD:
+ case SQUAD:
+ if (sizeof (bfd_vma) >= QUAD_SIZE)
+ bfd_put_64 (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 (output_bfd, high,
+ (link_order->u.data.contents
+ + (big_endian ? 0 : 4)));
+ bfd_put_32 (output_bfd, value,
+ (link_order->u.data.contents
+ + (big_endian ? 4 : 0)));
+ }
+ link_order->size = QUAD_SIZE;
+ break;
+ case LONG:
+ bfd_put_32 (output_bfd, value, link_order->u.data.contents);
+ link_order->size = LONG_SIZE;
+ break;
+ case SHORT:
+ bfd_put_16 (output_bfd, value, link_order->u.data.contents);
+ link_order->size = SHORT_SIZE;
+ break;
+ case BYTE:
+ bfd_put_8 (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 == output_bfd);
+
+ link_order = bfd_new_link_order (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 = 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 == 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;
+
+ ASSERT (output_section->owner == output_bfd);
+
+ if ((output_section->flags & SEC_HAS_CONTENTS) != 0
+ || ((output_section->flags & SEC_LOAD) != 0
+ && (output_section->flags & SEC_THREAD_LOCAL)))
+ {
+ struct bfd_link_order *link_order;
+
+ link_order = bfd_new_link_order (output_bfd, output_section);
+
+ if (i->flags & SEC_NEVER_LOAD)
+ {
+ /* 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
+ == output_bfd);
+ if ((output_section->flags & SEC_HAS_CONTENTS) != 0)
+ {
+ link_order = bfd_new_link_order (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 (strncmp (name, ".stab", 5) == 0)
+ {
+ /* 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 = 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 (strncmp (name, ".stab", 5) == 0
+ || 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;
+ 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 (output_bfd, &link_info);
+ if (!bfd_final_link (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.17/ld/ldwrite.h b/binutils-2.17/ld/ldwrite.h
new file mode 100644
index 00000000..1851a867
--- /dev/null
+++ b/binutils-2.17/ld/ldwrite.h
@@ -0,0 +1,21 @@
+/* ldwrite.h -
+ Copyright 1991, 1992, 1993, 2003 Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+void ldwrite (void);
diff --git a/binutils-2.17/ld/lexsup.c b/binutils-2.17/ld/lexsup.c
new file mode 100644
index 00000000..c2bef1dd
--- /dev/null
+++ b/binutils-2.17/ld/lexsup.c
@@ -0,0 +1,1553 @@
+/* Parse options for the GNU linker.
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+#include "config.h"
+#include "bfd.h"
+#include "sysdep.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"
+
+#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_HELP,
+ OPTION_IGNORE,
+ OPTION_MAP,
+ OPTION_NO_DEMANGLE,
+ OPTION_NO_KEEP_MEMORY,
+ OPTION_NO_WARN_MISMATCH,
+ OPTION_NOINHIBIT_EXEC,
+ OPTION_NON_SHARED,
+ OPTION_NO_WHOLE_ARCHIVE,
+ OPTION_OFORMAT,
+ OPTION_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_TASK_LINK,
+ OPTION_TBSS,
+ OPTION_TDATA,
+ OPTION_TTEXT,
+ OPTION_TRADITIONAL_FORMAT,
+ OPTION_UR,
+ OPTION_VERBOSE,
+ OPTION_VERSION,
+ OPTION_VERSION_SCRIPT,
+ OPTION_VERSION_EXPORTS_SECTION,
+ OPTION_WARN_COMMON,
+ OPTION_WARN_CONSTRUCTORS,
+ OPTION_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_NEEDED,
+ OPTION_NO_ADD_NEEDED,
+ OPTION_AS_NEEDED,
+ OPTION_NO_AS_NEEDED,
+ OPTION_WRAP,
+ OPTION_FORCE_EXE_SUFFIX,
+ OPTION_GC_SECTIONS,
+ OPTION_NO_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_REDUCE_MEMORY_OVERHEADS
+};
+
+/* The long options. This structure is used for both the option
+ parsing and the help text. */
+
+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 {
+ /* 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
+ } 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 },
+ { {"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 },
+ { {"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 },
+ { {"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 },
+ { {"add-needed", no_argument, NULL, OPTION_ADD_NEEDED},
+ '\0', NULL, N_("Set DT_NEEDED tags for DT_NEEDED entries in\n"
+ "\t\t\t\tfollowing dynamic libs"), TWO_DASHES },
+ { {"no-add-needed", no_argument, NULL, OPTION_NO_ADD_NEEDED},
+ '\0', NULL, N_("Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+ "\t\t\t\tin following dynamic libs"), TWO_DASHES },
+ { {"as-needed", no_argument, NULL, OPTION_AS_NEEDED},
+ '\0', NULL, N_("Only set DT_NEEDED for following dynamic libs if used"),
+ TWO_DASHES },
+ { {"no-as-needed", no_argument, NULL, OPTION_NO_AS_NEEDED},
+ '\0', NULL, N_("Always set DT_NEEDED for following dynamic libs"),
+ 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 },
+ { {"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 },
+ { {"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 },
+ { {"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 },
+ { {"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-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"
+ "\t\t\t\tthe 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_("Relax branches on certain targets"), 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", no_argument, NULL, OPTION_SORT_COMMON},
+ '\0', NULL, N_("Sort common symbols by size"), 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 },
+ { {"unresolved-symbols=<method>", required_argument, NULL,
+ OPTION_UNRESOLVED_SYMBOLS},
+ '\0', NULL, N_("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"), 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"
+ "\t\t\t\tSYMBOL as the version."), 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-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 = xmalloc (OPTION_COUNT * 3 + 2);
+ longopts = xmalloc (sizeof (*longopts) * (OPTION_COUNT + 1));
+ really_longopts = xmalloc (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 = 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]);
+ 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 'e':
+ lang_add_entry (optarg, TRUE);
+ break;
+ case 'f':
+ if (command_line.auxiliary_filters == NULL)
+ {
+ command_line.auxiliary_filters = 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
+ = 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_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_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_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;
+ 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
+ {
+ size_t idx = 0;
+
+ while (optarg[idx] != '\0' && optarg[idx] == cp[idx])
+ ++idx;
+ if (optarg[idx] == '\0'
+ && (cp[idx] == '\0' || cp[idx] == ':'))
+ /* We found it. */
+ break;
+
+ /* Not yet found. */
+ cp = strchr (cp, ':');
+ if (cp != NULL)
+ ++cp;
+ }
+ while (cp != NULL);
+
+ if (cp == NULL)
+ {
+ buf = xmalloc (rpath_len + optarg_len + 2);
+ sprintf (buf, "%s:%s", command_line.rpath, 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 = xmalloc (strlen (command_line.rpath_link)
+ + strlen (optarg)
+ + 2);
+ sprintf (buf, "%s:%s", command_line.rpath_link, optarg);
+ free (command_line.rpath_link);
+ command_line.rpath_link = buf;
+ }
+ break;
+ case OPTION_RELAX:
+ command_line.relax = TRUE;
+ 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:
+ config.sort_common = TRUE;
+ 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:
+ link_info.symbolic = TRUE;
+ break;
+ case 't':
+ trace_files = TRUE;
+ break;
+ case 'T':
+ ldfile_open_command_file (optarg);
+ parser_input = input_script;
+ yyparse ();
+ 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 = 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_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);
+ 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_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_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_WHOLE_ARCHIVE:
+ whole_archive = TRUE;
+ break;
+ case OPTION_ADD_NEEDED:
+ add_needed = TRUE;
+ break;
+ case OPTION_NO_ADD_NEEDED:
+ add_needed = FALSE;
+ break;
+ case OPTION_AS_NEEDED:
+ as_needed = TRUE;
+ break;
+ case OPTION_NO_AS_NEEDED:
+ as_needed = 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 (strncmp (optarg, "P,", 2) == 0)
+ 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 = TRUE;
+ break;
+ case OPTION_NO_CHECK_SECTIONS:
+ command_line.check_section_addresses = FALSE;
+ 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 '(':
+ if (ingroup)
+ einfo (_("%P%F: may not nest groups (--help for usage)\n"));
+
+ lang_enter_group ();
+ ingroup = 1;
+ break;
+ case ')':
+ if (! ingroup)
+ einfo (_("%P%F: group ended before it began (--help for usage)\n"));
+
+ lang_leave_group ();
+ ingroup = 0;
+ break;
+
+ case OPTION_INIT:
+ link_info.init_function = optarg;
+ break;
+
+ case OPTION_FINI:
+ link_info.fini_function = optarg;
+ break;
+
+ case OPTION_REDUCE_MEMORY_OVERHEADS:
+ command_line.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;
+ }
+ }
+
+ if (ingroup)
+ lang_leave_group ();
+
+ 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;
+}
+
+/* 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 = 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");
+
+ printf (_("Report bugs to %s\n"), REPORT_BUGS_TO);
+}
diff --git a/binutils-2.17/ld/mri.c b/binutils-2.17/ld/mri.c
new file mode 100644
index 00000000..5330df3b
--- /dev/null
+++ b/binutils-2.17/ld/mri.c
@@ -0,0 +1,316 @@
+/* mri.c -- handle MRI style linker scripts
+ Copyright 1991, 1992, 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+GLD 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.
+
+GLD 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.
+
+ This bit does the tree decoration when MRI style link scripts
+ are parsed.
+
+ Contributed by Steve Chamberlain <sac@cygnus.com>. */
+
+#include "bfd.h"
+#include "sysdep.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 = 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 ? 0 : noload_section,
+ align, subalign, NULL, 0);
+ base = 0;
+ tmp = 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 = 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.17/ld/mri.h b/binutils-2.17/ld/mri.h
new file mode 100644
index 00000000..fcfba78b
--- /dev/null
+++ b/binutils-2.17/ld/mri.h
@@ -0,0 +1,37 @@
+/* mri.h -- header file for MRI scripting functions
+ Copyright 1993, 1995, 1996, 2003 Free Software Foundation, Inc.
+
+This file is part of GLD, the Gnu Linker.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#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.17/ld/pe-dll.c b/binutils-2.17/ld/pe-dll.c
new file mode 100644
index 00000000..d4d42e4d
--- /dev/null
+++ b/binutils-2.17/ld/pe-dll.c
@@ -0,0 +1,2727 @@
+/* Routines to help build PEI-format DLLs (Win32 etc)
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
+ Written by DJ Delorie <dj@cygnus.com>
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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. */
+
+#include "bfd.h"
+#include "sysdep.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"
+#include "pe-dll.h"
+
+/* 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. */
+
+/* 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$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 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. */
+
+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_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;
+
+/* 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;
+
+typedef struct
+ {
+ char *target_name;
+ char *object_target;
+ unsigned int imagebase_reloc;
+ int pe_arch;
+ int bfd_arch;
+ int underscored;
+ }
+pe_details_type;
+
+typedef struct
+ {
+ char *name;
+ int len;
+ }
+autofilter_entry_type;
+
+#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
+
+static pe_details_type pe_detail_list[] =
+{
+ {
+ "pei-i386",
+ "pe-i386",
+ 7 /* R_IMAGEBASE */,
+ PE_ARCH_i386,
+ bfd_arch_i386,
+ 1
+ },
+ {
+ "pei-shl",
+ "pe-shl",
+ 16 /* R_SH_IMAGEBASE */,
+ PE_ARCH_sh,
+ bfd_arch_sh,
+ 1
+ },
+ {
+ "pei-mips",
+ "pe-mips",
+ 34 /* MIPS_R_RVA */,
+ PE_ARCH_mips,
+ bfd_arch_mips,
+ 0
+ },
+ {
+ "pei-arm-little",
+ "pe-arm-little",
+ 11 /* ARM_RVA32 */,
+ PE_ARCH_arm,
+ bfd_arch_arm,
+ 1
+ },
+ {
+ "epoc-pei-arm-little",
+ "epoc-pe-arm-little",
+ 11 /* ARM_RVA32 */,
+ PE_ARCH_arm_epoc,
+ bfd_arch_arm,
+ 0
+ },
+ { NULL, NULL, 0, 0, 0, 0 }
+};
+
+static pe_details_type *pe_details;
+
+static autofilter_entry_type autofilter_symbollist[] =
+{
+ { "DllMain@12", 10 },
+ { "DllEntryPoint@0", 15 },
+ { "DllMainCRTStartup@12", 20 },
+ { "_cygwin_dll_entry@12", 20 },
+ { "_cygwin_crt0_common@8", 21 },
+ { "_cygwin_noncygwin_dll_entry@12", 30 },
+ { "impure_ptr", 10 },
+ { "_pei386_runtime_relocator", 25 },
+ { "do_pseudo_reloc", 15 },
+ { "cygwin_crt0", 11 },
+ { NULL, 0 }
+};
+
+/* Do not specify library suffix explicitly, to allow for dllized versions. */
+static autofilter_entry_type autofilter_liblist[] =
+{
+ { "libcygwin", 9 },
+ { "libgcc", 6 },
+ { "libstdc++", 9 },
+ { "libmingw32", 10 },
+ { "libmingwex", 10 },
+ { "libg2c", 6 },
+ { "libsupc++", 9 },
+ { "libobjc", 7 },
+ { "libgcj", 6 },
+ { NULL, 0 }
+};
+
+static autofilter_entry_type autofilter_objlist[] =
+{
+ { "crt0.o", 6 },
+ { "crt1.o", 6 },
+ { "crt2.o", 6 },
+ { "dllcrt1.o", 9 },
+ { "dllcrt2.o", 9 },
+ { "gcrt0.o", 7 },
+ { "gcrt1.o", 7 },
+ { "gcrt2.o", 7 },
+ { "crtbegin.o", 10 },
+ { "crtend.o", 8 },
+ { NULL, 0 }
+};
+
+static autofilter_entry_type autofilter_symbolprefixlist[] =
+{
+ /* { "__imp_", 6 }, */
+ /* Do __imp_ explicitly to save time. */
+ { "__rtti_", 7 },
+ /* Don't re-export auto-imported symbols. */
+ { "_nm_", 4 },
+ { "__builtin_", 10 },
+ /* Don't export symbols specifying internal DLL layout. */
+ { "_head_", 6 },
+ { "_fmode", 6 },
+ { "_impure_ptr", 11 },
+ { "cygwin_attach_dll", 17 },
+ { "cygwin_premain0", 15 },
+ { "cygwin_premain1", 15 },
+ { "cygwin_premain2", 15 },
+ { "cygwin_premain3", 15 },
+ { "environ", 7 },
+ { NULL, 0 }
+};
+
+static autofilter_entry_type autofilter_symbolsuffixlist[] =
+{
+ { "_iname", 6 },
+ { 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)
+ {
+ pe_details = pe_detail_list + i;
+ 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;
+
+ return strcmp (a->name, b->name);
+}
+
+/* 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;
+ int type;
+ }
+exclude_list_struct;
+
+static struct exclude_list_struct *excludes = 0;
+
+void
+pe_dll_add_excludes (const char *new_excludes, const int 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);
+}
+
+
+/* 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;
+ autofilter_entry_type *afptr;
+ const char * libname = 0;
+ if (abfd && abfd->my_archive)
+ libname = lbasename (abfd->my_archive->filename);
+
+ /* We should not re-export imported stuff. */
+ if (strncmp (n, "_imp_", 5) == 0)
+ return 0;
+
+ 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 (strncmp (libname, afptr->name, afptr->len) == 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. */
+
+ /* Then, exclude specific symbols. */
+ afptr = 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 == 1) /* exclude-libs */
+ {
+ if (libname
+ && ((strcmp (libname, ex->string) == 0)
+ || (strcasecmp ("ALL", ex->string) == 0)))
+ return 0;
+ }
+ else if (strcmp (n, ex->string) == 0)
+ return 0;
+ }
+
+ return 1;
+}
+
+static void
+process_def_file (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);
+ }
+ }
+
+ /* If we are not building a DLL, when there are no exports
+ we do not build an export table at all. */
+ if (!pe_dll_export_everything && pe_def_file->num_exports == 0
+ && info->executable)
+ return;
+
+ /* Now, maybe export everything else the default way. */
+ if (pe_dll_export_everything || pe_def_file->num_exports == 0)
+ {
+ for (b = info->input_bfds; b; b = b->link_next)
+ {
+ asymbol **symbols;
+ int nsyms, symsize;
+
+ symsize = bfd_get_symtab_upper_bound (b);
+ symbols = xmalloc (symsize);
+ nsyms = bfd_canonicalize_symtab (b, symbols);
+
+ 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. */
+ if (symbols[j]->section != &bfd_und_section
+ && ((symbols[j]->flags & BSF_GLOBAL)
+ || (symbols[j]->flags == BFD_FORT_COMM_DEFAULT_VALUE)))
+ {
+ const char *sn = symbols[j]->name;
+
+ /* We should not re-export imported stuff. */
+ {
+ char *name = xmalloc (strlen (sn) + 2 + 6);
+ sprintf (name, "%s%s", U("_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 (*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);
+ /* Fill data flag properly, from dlltool.c. */
+ p->flag_data = !(symbols[j]->flags & BSF_FUNCTION);
+ }
+ }
+ }
+ }
+ }
+
+#undef NE
+#define NE pe_def_file->num_exports
+
+ /* 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 (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);
+ 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;
+
+ /* Check for forward exports */
+ 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++;
+ }
+
+ continue;
+ }
+
+ 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++;
+ }
+ }
+ 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", output_bfd);
+ if (filler_bfd == NULL
+ || !bfd_set_arch_mach (filler_bfd,
+ bfd_get_arch (output_bfd),
+ bfd_get_mach (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;
+ }
+ 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(). */
+
+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 = edata_d + 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
+ {
+ unsigned long 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;
+
+ 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;
+ int nsyms, symsize;
+
+ symsize = bfd_get_symtab_upper_bound (b);
+ symbols = xmalloc (symsize);
+ nsyms = bfd_canonicalize_symtab (b, symbols);
+
+ 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;
+ unsigned long sec_page = (unsigned long) -1;
+ unsigned long 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, i;
+
+ for (s = b->sections; s; s = s->next)
+ {
+ unsigned long sec_vma = s->output_section->vma + s->output_offset;
+ asymbol **symbols;
+ int nsyms, symsize;
+
+ /* 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;
+ }
+
+ symsize = bfd_get_symtab_upper_bound (b);
+ symbols = xmalloc (symsize);
+ nsyms = bfd_canonicalize_symtab (b, symbols);
+
+ 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)
+ {
+ bfd_vma sym_vma;
+ struct bfd_symbol *sym = *relocs[i]->sym_ptr_ptr;
+
+ sym_vma = (relocs[i]->addend
+ + sym->value
+ + sym->section->vma
+ + sym->section->output_offset
+ + sym->section->output_section->vma);
+ 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)
+ {
+ 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++)
+ {
+ unsigned long 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 = (unsigned long) -1;
+ reloc_sz = 0;
+ page_ptr = (unsigned long) -1;
+ page_count = 0;
+
+ for (i = 0; i < total_relocs; i++)
+ {
+ unsigned long rva = reloc_data[i].vma - image_base;
+ unsigned long this_page = (rva & ~0xfff);
+
+ if (this_page != sec_page)
+ {
+ while (reloc_sz & 3)
+ reloc_d[reloc_sz++] = 0;
+
+ if (page_ptr != (unsigned long) -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 != (unsigned long) -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 (output_bfd)->pe_opthdr.ImageBase)
+ fprintf (out, " BASE=0x%lx",
+ (unsigned long) pe_data (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);
+
+ 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 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, int 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);
+ d2[0] = d2[16] = 4; /* 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);
+
+ bfd_set_section_size (abfd, id5, 4);
+ d5 = xmalloc (4);
+ id5->contents = d5;
+ memset (d5, 0, 4);
+
+ bfd_set_section_size (abfd, id4, 4);
+ d4 = xmalloc (4);
+ id4->contents = d4;
+ memset (d4, 0, 4);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, id2, d2, 0, 20);
+ bfd_set_section_contents (abfd, id5, d5, 0, 4);
+ bfd_set_section_contents (abfd, id4, d4, 0, 4);
+
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+/* .section .idata$4
+ .long 0
+ .section .idata$5
+ .long 0
+ .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, 4);
+ d4 = xmalloc (4);
+ id4->contents = d4;
+ memset (d4, 0, 4);
+
+ bfd_set_section_size (abfd, id5, 4);
+ d5 = xmalloc (4);
+ id5->contents = d5;
+ memset (d5, 0, 4);
+
+ 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);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, id4, d4, 0, 4);
+ bfd_set_section_contents (abfd, id5, d5, 0, 4);
+ 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 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 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 unsigned char jmp_mips_bytes[] =
+{
+ 0x00, 0x00, 0x08, 0x3c, 0x00, 0x00, 0x08, 0x8d,
+ 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00
+};
+
+static bfd *
+make_one (def_file_export *exp, bfd *parent)
+{
+ asection *tx, *id7, *id5, *id4, *id6;
+ unsigned char *td = NULL, *d7, *d5, *d4, *d6 = NULL;
+ int len;
+ char *oname;
+ bfd *abfd;
+ unsigned char *jmp_bytes = NULL;
+ int jmp_byte_count = 0;
+
+ 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;
+ 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 (11 * sizeof (asymbol *));
+ tx = quick_section (abfd, ".text", SEC_CODE|SEC_HAS_CONTENTS, 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 (! exp->flag_data)
+ quick_symbol (abfd, "", exp->internal_name, "", tx, BSF_GLOBAL, 0);
+ quick_symbol (abfd, U ("_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 (! exp->flag_data)
+ quick_symbol (abfd, U (""), exp->internal_name, "", tx,
+ BSF_GLOBAL, 0);
+ quick_symbol (abfd, U ("_imp__"), 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, U("_nm__"), exp->internal_name, "", id6,
+ BSF_GLOBAL,0);
+ }
+ if (pe_dll_compat_implib)
+ quick_symbol (abfd, U ("__imp_"), exp->internal_name, "", id5,
+ BSF_GLOBAL, 0);
+
+ if (! exp->flag_data)
+ {
+ 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:
+ quick_reloc (abfd, 2, BFD_RELOC_32, 2);
+ 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;
+ default:
+ abort ();
+ }
+ save_relocs (tx);
+ }
+
+ 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, 4);
+ d5 = xmalloc (4);
+ id5->contents = d5;
+ memset (d5, 0, 4);
+
+ if (exp->flag_noname)
+ {
+ d5[0] = exp->ordinal;
+ d5[1] = exp->ordinal >> 8;
+ d5[3] = 0x80;
+ }
+ else
+ {
+ quick_reloc (abfd, 0, BFD_RELOC_RVA, 4);
+ save_relocs (id5);
+ }
+
+ bfd_set_section_size (abfd, id4, 4);
+ d4 = xmalloc (4);
+ id4->contents = d4;
+ memset (d4, 0, 4);
+
+ if (exp->flag_noname)
+ {
+ d4[0] = exp->ordinal;
+ d4[1] = exp->ordinal >> 8;
+ d4[3] = 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
+ {
+ len = strlen (exp->name) + 3;
+ 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;
+ strcpy ((char *) d6 + 2, exp->name);
+ }
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ 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, 4);
+ bfd_set_section_contents (abfd, id4, d4, 0, 4);
+ if (!exp->flag_noname)
+ bfd_set_section_contents (abfd, id6, d6, 0, len);
+
+ 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, U ("_nm_thnk_"), import, "", id4, BSF_GLOBAL, 0);
+ quick_symbol (abfd, U ("_nm_"), import, "", UNDSEC, BSF_GLOBAL, 0);
+
+ bfd_set_section_size (abfd, id4, 8);
+ d4 = xmalloc (4);
+ id4->contents = d4;
+ memset (d4, 0, 8);
+ 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, 8);
+
+ 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);
+
+ if (0)
+ {
+ struct coff_link_hash_entry *myh;
+
+ myh = (struct coff_link_hash_entry *) bh;
+ printf ("type:%d\n", myh->type);
+ printf ("%s\n", myh->root.u.def.section->name);
+ }
+
+ return fixup_name;
+}
+
+/* .section .idata$3
+ .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 *dll_symname,
+ bfd *parent)
+{
+ asection *id3;
+ unsigned char *d3;
+ 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 *));
+ id3 = quick_section (abfd, ".idata$3", SEC_HAS_CONTENTS, 2);
+
+ quick_symbol (abfd, U ("_nm_thnk_"), name, "", UNDSEC, BSF_GLOBAL, 0);
+ quick_symbol (abfd, U (""), dll_symname, "_iname", UNDSEC, BSF_GLOBAL, 0);
+ quick_symbol (abfd, "", fixup_name, "", UNDSEC, BSF_GLOBAL, 0);
+
+ bfd_set_section_size (abfd, id3, 20);
+ d3 = xmalloc (20);
+ id3->contents = d3;
+ memset (d3, 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 (id3);
+
+ bfd_set_symtab (abfd, symtab, symptr);
+
+ bfd_set_section_contents (abfd, id3, d3, 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,
+ int addend,
+ 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;
+ 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);
+
+ 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, "", "__pei386_runtime_relocator", "", UNDSEC,
+ BSF_NO_FLAGS, 0);
+
+ bfd_set_section_size (abfd, extern_rt_rel, 4);
+ extern_rt_rel_d = xmalloc (4);
+ 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, 4);
+
+ bfd_make_readable (abfd);
+ return abfd;
+}
+
+void
+pe_create_import_fixup (arelent *rel, asection *s, int addend)
+{
+ char buf[300];
+ struct bfd_symbol *sym = *rel->sym_ptr_ptr;
+ struct bfd_link_hash_entry *name_thunk_sym;
+ const char *name = sym->name;
+ char *fixup_name = make_import_fixup_mark (rel);
+ bfd *b;
+
+ sprintf (buf, U ("_nm_thnk_%s"), name);
+
+ name_thunk_sym = bfd_link_hash_lookup (link_info.hash, buf, 0, 0, 1);
+
+ if (!name_thunk_sym || name_thunk_sym->type != bfd_link_hash_defined)
+ {
+ bfd *b = make_singleton_name_thunk (name, output_bfd);
+ add_bfd_to_link (b, b->filename, &link_info);
+
+ /* If we ever use autoimport, we have to cast text section writable. */
+ config.text_read_only = FALSE;
+ output_bfd->flags &= ~WP_TEXT;
+ }
+
+ if (addend == 0 || link_info.pei386_runtime_pseudo_reloc)
+ {
+ extern char * pe_data_import_dll;
+ char * dll_symname = pe_data_import_dll ? pe_data_import_dll : "unknown";
+
+ b = make_import_fixup_entry (name, fixup_name, dll_symname, output_bfd);
+ add_bfd_to_link (b, b->filename, &link_info);
+ }
+
+ if (addend != 0)
+ {
+ if (link_info.pei386_runtime_pseudo_reloc)
+ {
+ if (pe_dll_extra_pe_debug)
+ printf ("creating runtime pseudo-reloc entry for %s (addend=%d)\n",
+ fixup_name, addend);
+ b = make_runtime_pseudo_reloc (name, fixup_name, addend, output_bfd);
+ add_bfd_to_link (b, b->filename, &link_info);
+
+ if (runtime_pseudo_relocs_created == 0)
+ {
+ b = pe_create_runtime_relocator_reference (output_bfd);
+ add_bfd_to_link (b, b->filename, &link_info);
+ }
+ runtime_pseudo_relocs_created++;
+ }
+ else
+ {
+ 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)
+{
+ int i;
+ bfd *ar_head;
+ bfd *ar_tail;
+ bfd *outarch;
+ 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);
+
+ 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);
+ n->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->next = head;
+ ar_tail->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->next;
+ bfd_close (head);
+ head = n;
+ }
+}
+
+static void
+add_bfd_to_link (bfd *abfd, const char *name, struct bfd_link_info *link_info)
+{
+ 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, link_info))
+ einfo ("%Xaddsym %s: %E\n", name);
+}
+
+void
+pe_process_import_defs (bfd *output_bfd, struct bfd_link_info *link_info)
+{
+ 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);
+
+ if (lead_at)
+ sprintf (name, "%s%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 (link_info->hash, name,
+ FALSE, FALSE, FALSE);
+
+ if (!blhe || (blhe && blhe->type != bfd_link_hash_undefined))
+ {
+ if (lead_at)
+ sprintf (name, "%s%s", U ("_imp_"),
+ pe_def_file->imports[i].internal_name);
+ else
+ sprintf (name, "%s%s", U ("_imp__"),
+ pe_def_file->imports[i].internal_name);
+
+ blhe = bfd_link_hash_lookup (link_info->hash, name,
+ FALSE, FALSE, FALSE);
+ }
+ 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, link_info);
+ do_this_dll = 1;
+ }
+ exp.internal_name = pe_def_file->imports[i].internal_name;
+ exp.name = pe_def_file->imports[i].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);
+ add_bfd_to_link (one, one->filename, link_info);
+ }
+ }
+ if (do_this_dll)
+ {
+ bfd *ar_tail = make_tail (output_bfd);
+ add_bfd_to_link (ar_tail, ar_tail->filename, link_info);
+ }
+
+ 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;
+ unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+ unsigned long export_rva, export_size, nsections, secptr, expptr;
+ unsigned long exp_funcbase;
+ unsigned char *expdata;
+ char *erva;
+ unsigned long name_rvas, ordinals, nexp, ordbase;
+ const char *dll_name;
+ /* Initialization with start > end guarantees that is_data
+ will not be set by mistake, and avoids compiler warning. */
+ unsigned long data_start = 1;
+ unsigned long data_end = 0;
+ unsigned long rdata_start = 1;
+ unsigned long rdata_end = 0;
+ unsigned long bss_start = 1;
+ unsigned long 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 export entries. */
+ pe_header_offset = pe_get32 (dll, 0x3c);
+ opthdr_ofs = pe_header_offset + 4 + 20;
+ num_entries = pe_get32 (dll, opthdr_ofs + 92);
+
+ if (num_entries < 1) /* No exports. */
+ return FALSE;
+
+ export_rva = pe_get32 (dll, opthdr_ofs + 96);
+ export_size = pe_get32 (dll, opthdr_ofs + 100);
+ 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];
+ unsigned long secptr1 = secptr + 40 * i;
+ unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+ unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+ unsigned long 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++)
+ {
+ unsigned long secptr1 = secptr + 40 * i;
+ unsigned long vsize = pe_get32 (dll, secptr1 + 8);
+ unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+ unsigned long 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, vaddr, vaddr + vsize, 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, vaddr, vaddr + vsize, 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, vaddr, vaddr + vsize, 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);
+ ordinals = pe_as32 (expdata + 36);
+ ordbase = pe_as32 (expdata + 16);
+ exp_funcbase = pe_as32 (expdata + 28);
+
+ /* Use internal dll name instead of filename
+ to enable symbolic dll linking. */
+ dll_name = 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, dll_name))
+ {
+ if (pe_dll_extra_pe_debug)
+ printf ("%s is already loaded\n", dll_name);
+ return TRUE;
+ }
+
+ /* Iterate through the list of symbols. */
+ for (i = 0; i < nexp; i++)
+ {
+ /* Pointer to the names vector. */
+ unsigned long name_rva = pe_as32 (erva + name_rvas + i * 4);
+ def_file_import *imp;
+ /* Pointer to the function address vector. */
+ unsigned long 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 (strncmp (erva + name_rva, "_nm_", 4) != 0)
+ {
+ /* 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,
+ dll_name, i, 0);
+ /* 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__, dll_name, erva + name_rva,
+ func_rva, is_data ? "(data)" : "");
+ }
+ }
+
+ return TRUE;
+}
+
+/* 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));
+ process_def_file (abfd, info);
+
+ if (pe_def_file->num_exports == 0 && !info->shared)
+ return;
+
+ generate_edata (abfd, info);
+ build_filler_bfd (1);
+}
+
+void
+pe_exe_build_sections (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
+{
+ pe_dll_id_target (bfd_get_target (abfd));
+ build_filler_bfd (0);
+}
+
+void
+pe_dll_fill_sections (bfd *abfd, struct bfd_link_info *info)
+{
+ pe_dll_id_target (bfd_get_target (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));
+ 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;
+}
diff --git a/binutils-2.17/ld/pe-dll.h b/binutils-2.17/ld/pe-dll.h
new file mode 100644
index 00000000..c79e563b
--- /dev/null
+++ b/binutils-2.17/ld/pe-dll.h
@@ -0,0 +1,62 @@
+/* pe-dll.h: Header file for routines used to build Windows DLLs.
+ Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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 PE_DLL_H
+#define PE_DLL_H
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "bfdlink.h"
+#include "deffile.h"
+
+extern def_file *pe_def_file;
+extern int pe_dll_export_everything;
+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 void pe_dll_id_target
+ (const char *);
+extern void pe_dll_add_excludes
+ (const char *, const int);
+extern void pe_dll_generate_def_file
+ (const char *);
+extern void pe_dll_generate_implib
+ (def_file *, const char *);
+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 *, int);
+#endif /* PE_DLL_H */
diff --git a/binutils-2.17/ld/po/Make-in b/binutils-2.17/ld/po/Make-in
new file mode 100644
index 00000000..dcd8cbac
--- /dev/null
+++ b/binutils-2.17/ld/po/Make-in
@@ -0,0 +1,255 @@
+# 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 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@
+
+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=$(srcdir)/`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_ \
+ --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-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.17/ld/po/POTFILES.in b/binutils-2.17/ld/po/POTFILES.in
new file mode 100644
index 00000000..5bb2e119
--- /dev/null
+++ b/binutils-2.17/ld/po/POTFILES.in
@@ -0,0 +1,30 @@
+deffile.h
+elf-hints-local.h
+emultempl/armcoff.em
+emultempl/pe.em
+ldcref.c
+ldctor.c
+ldctor.h
+ldemul.c
+ldemul.h
+ldexp.c
+ldexp.h
+ldfile.c
+ldfile.h
+ld.h
+ldlang.c
+ldlang.h
+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
diff --git a/binutils-2.17/ld/po/da.gmo b/binutils-2.17/ld/po/da.gmo
new file mode 100644
index 00000000..495c6034
--- /dev/null
+++ b/binutils-2.17/ld/po/da.gmo
Binary files differ
diff --git a/binutils-2.17/ld/po/da.po b/binutils-2.17/ld/po/da.po
new file mode 100644
index 00000000..37457b76
--- /dev/null
+++ b/binutils-2.17/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.17/ld/po/es.gmo b/binutils-2.17/ld/po/es.gmo
new file mode 100644
index 00000000..4828a32f
--- /dev/null
+++ b/binutils-2.17/ld/po/es.gmo
Binary files differ
diff --git a/binutils-2.17/ld/po/es.po b/binutils-2.17/ld/po/es.po
new file mode 100644
index 00000000..64c51a77
--- /dev/null
+++ b/binutils-2.17/ld/po/es.po
@@ -0,0 +1,2004 @@
+# Mensajes en español para ld 2.16.93.
+# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Cristian Othón Martínez Vera <cfuga@itam.mx>, 2002, 2003, 2004, 2005, 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-05-26 16:31-0500\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:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Soporte para interoperar con código antiguo\n"
+
+#: emultempl/armcoff.em:73
+#, 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:121
+#, c-format
+msgid "Errors encountered processing file %s"
+msgstr "Errores encontrados al procesar el fichero %s"
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1460
+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:1465
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr "%P: aviso: no se puede encontrar el símbolo de inicio thumb %s\n"
+
+#: emultempl/pe.em:304
+#, 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:305
+#, 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:306
+#, 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:307
+#, 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:308
+#, 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:309
+#, 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:310
+#, 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:311
+#, 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:312
+#, 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:313
+#, 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:314
+#, 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:315
+#, 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:316
+#, 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:317
+#, 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:318
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code Soporte para interoperar con código antiguo\n"
+
+#: emultempl/pe.em:319
+#, 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:321
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Exportar símbolos con y sin @nn\n"
+
+#: emultempl/pe.em:322
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr " --disable-stdcall-fixup No enlazar _sym con _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 Enlazar _sym con _sym@nn sin avisos\n"
+
+#: emultempl/pe.em:324
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols sim,sim,... Excluye los símbolos de la exportación automática\n"
+
+#: emultempl/pe.em:325
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs bib,bib,... Excluye las bibliotecas de la exportación automática\n"
+
+#: emultempl/pe.em:326
+#, 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:327
+#, 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:328
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <fichero> Generar una biblioteca de importación\n"
+
+#: emultempl/pe.em:329
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <fichero> Generar un fichero .DEF para la DLL construida\n"
+
+#: emultempl/pe.em:330
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports Avisar sobre exportaciones duplicadas.\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 Crear bibliotecas de importación compatibles hacia atrás;\n"
+" cerar además __imp_<SÍMBOLO>.\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 Escoger automáticamente la imagen base para las DLLs\n"
+" a menos que el usuario especifique una\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 No escoger automáticamente una imagen base. (por defecto)\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=<cadena> Al enlazar dinámicamente con una dll sin una\n"
+" biblioteca de importación, usar <cadena><nombrebase>.dll \n"
+" en lugar de lib<nombrebase>.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 Hacer enlazado sofisticado de _sym a\n"
+" __imp_sym para las referencias DATA\n"
+
+#: emultempl/pe.em:341
+#, c-format
+msgid " --disable-auto-import Do not auto-import DATA items from DLLs\n"
+msgstr " --disable-auto-import No importar automáticamente elementos DATA de las DLLs\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 Evitar limitaciones de autoimportación\n"
+" agregando pseudo-reubicaciones resueltas\n"
+" al momento de ejecució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 No agregar pseudo-reubicaciones al momento\n"
+" de ejecución para DATOS autoimportados.\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 Activa la salida de depuración detallada al construir\n"
+" o enlazar a DLLs (en part. con auto-importació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 El ejecutable tiene soporte para direcciones\n"
+" virtuales mayores a 2 gigabytes\n"
+
+#: emultempl/pe.em:417
+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:448
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: tipo de subsistema %s inválido\n"
+
+#: emultempl/pe.em:487
+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:504
+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:521
+#, 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:737
+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:824 emultempl/pe.em:851
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr "Aviso: resolviendo %s al enlazar con %s\n"
+
+#: emultempl/pe.em:829 emultempl/pe.em:856
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Use --enable-stdcall-fixup para desactivar estos avisos\n"
+
+#: emultempl/pe.em:830 emultempl/pe.em:857
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Use --disable-stdcall-fixup para desactivar estas composturas\n"
+
+#: emultempl/pe.em:876
+#, 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:913
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr "Información: resolviendo %s al enlazar con %s (auto-importación)\n"
+
+#: emultempl/pe.em:986
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr "%F%P: operaciones PE en un fichero que no es PE.\n"
+
+#: emultempl/pe.em:1261
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Se encontraron errores al procesar el fichero %s\n"
+
+#: emultempl/pe.em:1284
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "Se encontraron errores el procesar el fichero %s para interoperabilidad"
+
+#: 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: falló 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: falló bfd_hash_table_init de la tabla cref: %E\n"
+
+#: ldcref.c:160
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: falló cref_hash_lookup: %E\n"
+
+#: ldcref.c:226
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Tabla de Referencias Cruzadas\n"
+"\n"
+
+#: ldcref.c:227
+msgid "Symbol"
+msgstr "Símbolo"
+
+#: ldcref.c:235
+#, c-format
+msgid "File\n"
+msgstr "Fichero\n"
+
+#: ldcref.c:239
+#, c-format
+msgid "No symbols\n"
+msgstr "No hay símbolos\n"
+
+#: ldcref.c:360 ldcref.c:482
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: no se pueden leer símbolos; %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: no se pueden leer símbolos: %E\n"
+
+#: ldcref.c:415
+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:557 ldcref.c:564 ldmain.c:1279 ldmain.c:1286
+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:591
+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:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Se usaron diferentes reubicaciones en el conjunto %s\n"
+
+#: ldctor.c:102
+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 tiene soporte para la reubicación para el conjunto %s\n"
+
+#: ldctor.c:316
+msgid "%P%X: Unsupported size %d for set %s\n"
+msgstr "%P%X: Tamaño %d sin soporte para el conjunto %s\n"
+
+#: ldctor.c:337
+msgid ""
+"\n"
+"Set Symbol\n"
+"\n"
+msgstr ""
+"\n"
+"Conjunto Símbolo\n"
+"\n"
+
+#: ldemul.c:236
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S se ignora SYSLIB\n"
+
+#: ldemul.c:242
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S se ignora HLL\n"
+
+#: ldemul.c:262
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: no se reconoce el modo de emulación: %s\n"
+
+#: ldemul.c:263
+msgid "Supported emulations: "
+msgstr "Emulaciones con soporte: "
+
+#: ldemul.c:305
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " no hay opciones específicas de emulación.\n"
+
+#: ldexp.c:338
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% por cero\n"
+
+#: ldexp.c:346
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / por cero\n"
+
+#: ldexp.c:536
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr "%X%S: símbolo `%s' sin resolución referenciado en la expresión\n"
+
+#: ldexp.c:547
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: símbolo `%s' indefinido referenciado en la expresión\n"
+
+#: ldexp.c:608 ldexp.c:621
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: región MEMORY `%s' indefinida referenciada en la expresión\n"
+
+#: ldexp.c:683
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S no puede hacer una asignación PROVIDE al contador de ubicación\n"
+
+#: ldexp.c:697
+#, 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:700
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S asignación al contador de ubicación es inválida fuera de SECTION\n"
+
+#: ldexp.c:709
+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:748
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: falló la creación de la dispersión\n"
+
+#: ldexp.c:1000 ldexp.c:1025
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S expresión no constante para %s\n"
+
+#: ldexp.c:1082
+#, c-format
+msgid "%F%S non constant expression for %s\n"
+msgstr "%F%S expresión no constante para %s\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "falló el intento de abrir %s\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "tuvo éxito el intento de abrir %s\n"
+
+#: ldfile.c:147
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: objetivo BFD inválido `%s'\n"
+
+#: ldfile.c:255 ldfile.c:282
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: saltando el %s incompatible mientras se buscaba %s\n"
+
+#: ldfile.c:267
+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:384
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: %s (%s): No hay tal fichero: %E\n"
+
+#: ldfile.c:387
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: %s No hay tal fichero: %E\n"
+
+#: ldfile.c:417
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: no se puede encontrar %s dentro de %s\n"
+
+#: ldfile.c:420
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: no se puede encontrar %s\n"
+
+#: ldfile.c:437 ldfile.c:453
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "no se puede encontrar el fichero de guión %s\n"
+
+#: ldfile.c:439 ldfile.c:455
+#, c-format
+msgid "opened script file %s\n"
+msgstr "fichero de guión %s abierto\n"
+
+#: ldfile.c:499
+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:546
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: no se puede representar la máquina `%s'\n"
+
+#: ldlang.c:940 ldlang.c:982 ldlang.c:2695
+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:1025
+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:1031
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr "%P:%S: aviso: no se declaró la región %s\n"
+
+#: ldlang.c:1108 ldlang.c:1135
+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:1601
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Configuración de la Memoria\n"
+"\n"
+
+#: ldlang.c:1603
+msgid "Name"
+msgstr "Nombre"
+
+#: ldlang.c:1603
+msgid "Origin"
+msgstr "Origen"
+
+#: ldlang.c:1603
+msgid "Length"
+msgstr "Longitud"
+
+#: ldlang.c:1603
+msgid "Attributes"
+msgstr "Atributos"
+
+#: ldlang.c:1643
+#, 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:1709
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: Uso ilegal de la sección `%s'\n"
+
+#: ldlang.c:1716
+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:2313
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: fichero no reconocido: %E\n"
+
+#: ldlang.c:2314
+msgid "%B: matching formats:"
+msgstr "%B: formatos coincidentes:"
+
+#: ldlang.c:2321
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: fichero no reconocido: %E\n"
+
+#: ldlang.c:2385
+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:2396 ldlang.c:2410
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: no se puede leer símbolos: %E\n"
+
+#: ldlang.c:2665
+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 endianess\n"
+
+#: ldlang.c:2679
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: no se encuentra el objetivo %s\n"
+
+#: ldlang.c:2681
+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:2687
+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:2691
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: no se puede establecer la arquitectura: %E\n"
+
+#: ldlang.c:2839
+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:2857
+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:3288
+msgid " load address 0x%V"
+msgstr " cargar la dirección 0x%V"
+
+#: ldlang.c:3528
+msgid "%W (size before relaxing)\n"
+msgstr "%W (tamaño antes de la relajación)\n"
+
+#: ldlang.c:3615
+#, c-format
+msgid "Address of section %s set to "
+msgstr "La dirección de la sección %s se estableció a "
+
+#: ldlang.c:3768
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Falló con %d\n"
+
+#: ldlang.c:4040
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: la sección %s [%V -> %V] sobreescribe a la sección %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: la dirección 0x%v de %B sección %s no está dentro de la región %s\n"
+
+#: ldlang.c:4074
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: la región %s está llena (%B sección %s)\n"
+
+#: ldlang.c:4114
+#, 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:4139
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Error interno en la sección %s de biblioteca compartida COFF\n"
+
+#: ldlang.c:4197
+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:4202
+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:4224
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: aviso: cambiando el inicio de la sección %s por %lu bytes\n"
+
+#: ldlang.c:4388
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: no se puede relajar la sección: %E\n"
+
+#: ldlang.c:4636
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: declaración inválida de datos\n"
+
+#: ldlang.c:4669
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: declaración inválida de reubicación\n"
+
+#: ldlang.c:4802
+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:4815 ldlang.c:4834
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: no se puede establecer la dirección de inicio\n"
+
+#: ldlang.c:4827
+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; usando por defecto %V\n"
+
+#: ldlang.c:4839
+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:4888
+msgid "%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"
+msgstr "%P%F: No tiene soporte el enlazado reubicable con reubicaciones del formato %s (%B) al formato %s (%B)\n"
+
+#: ldlang.c:4898
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P: aviso: la arquitectura %s del fichero de entrada `%B' es incompatible con la salida %s\n"
+
+#: ldlang.c:4920
+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:5004
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Asignando símbolos comunes\n"
+
+#: ldlang.c:5005
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Símbolo común tamaño fichero\n"
+"\n"
+
+#: ldlang.c:5131
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: sintaxis inválida en los interruptores\n"
+
+#: ldlang.c:5406
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Falló al crear la tabla de dispersión\n"
+
+#: ldlang.c:5722
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: ficheros STARTUP múltiples\n"
+
+#: ldlang.c:5770
+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:6007
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: falló bfd_record_phdr: %E\n"
+
+#: ldlang.c:6027
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr "%X%P: se asignó la sección `%s' al phdr no existente `%s'\n"
+
+#: ldlang.c:6418
+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:6560
+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:6569
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: marca de versión `%s' duplicada\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: expresión `%s' duplicada en la información de la versión\n"
+
+#: ldlang.c:6665
+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:6687
+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:232
+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:345
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: no se pueden usar juntos -relax y -r\n"
+
+#: ldmain.c:347
+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:353
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: no se puede usar -F sin -shared\n"
+
+#: ldmain.c:355
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: no se puede usar -f sin -shared\n"
+
+#: ldmain.c:397
+msgid "using external linker script:"
+msgstr "usando el guión externo del enlazador:"
+
+#: ldmain.c:399
+msgid "using internal linker script:"
+msgstr "usando el guión interno del enlazador:"
+
+#: ldmain.c:433
+msgid "%P%F: no input files\n"
+msgstr "%P%F: no hay ficheros de entrada\n"
+
+#: ldmain.c:437
+msgid "%P: mode %s\n"
+msgstr "%P: modo %s\n"
+
+#: ldmain.c:453
+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: link errors found, deleting executable `%s'\n"
+msgstr "%P: se encontraron errores de enlace, borrando el ejecutable `%s'\n"
+
+#: ldmain.c:494
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: falló el cerrado final: %E\n"
+
+#: ldmain.c:520
+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:523
+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:530
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Error al escribir el fichero `%s'\n"
+
+#: ldmain.c:535 pe-dll.c:1494
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Error al cerrar el fichero `%s'\n"
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: tiempo total en el enlazado: %ld.%06ld\n"
+
+#: ldmain.c:554
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: tamaño de los datos %ld\n"
+
+#: ldmain.c:637
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: falta el argumento para -m\n"
+
+#: ldmain.c:784 ldmain.c:803 ldmain.c:834
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: falló bfd_hash_table_init: %E\n"
+
+#: ldmain.c:788 ldmain.c:807
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: falló bfd_hash_lookup: %E\n"
+
+#: ldmain.c:821
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: error: fichero de símbolos a retener duplicado\n"
+
+#: ldmain.c:864
+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:869
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P `-retain-symbols-file' se impone a `-s' y `-S'\n"
+
+#: ldmain.c:944
+#, 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:1014
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: definiciones múltiples de `%T'\n"
+
+#: ldmain.c:1017
+msgid "%D: first defined here\n"
+msgstr "%D: primero se definió aquí\n"
+
+#: ldmain.c:1021
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Desactivandola la relajación: no trabajará 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:1051
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: aviso: la definición de `%T' se impone a common\n"
+
+#: ldmain.c:1054
+msgid "%B: warning: common is here\n"
+msgstr "%B: aviso: common está aquí\n"
+
+#: ldmain.c:1061
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: aviso: el common de `%T' es sobrepasado por definición\n"
+
+#: ldmain.c:1064
+msgid "%B: warning: defined here\n"
+msgstr "%B: aviso: definido aquí\n"
+
+#: ldmain.c:1071
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: aviso: el common de `%T' es sobrepasado por un common más grande\n"
+
+#: ldmain.c:1074
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: aviso: el common más grande está aquí\n"
+
+#: ldmain.c:1078
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: aviso: el common de `%T' es sobrepasado por un common más pequeño\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: aviso: el common más pequeño está aquí\n"
+
+#: ldmain.c:1085
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: aviso: common múltiple de `%T'\n"
+
+#: ldmain.c:1087
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: aviso: el common previo está aquí\n"
+
+#: ldmain.c:1107 ldmain.c:1145
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: aviso: se usó el constructor global %s\n"
+
+#: ldmain.c:1155
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: error del frente trasero de BFD: BFD_RELOC_CTOR sin soporte\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 "aviso: "
+
+#: ldmain.c:1334
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: falló bfd_hash_table_init: %E\n"
+
+#: ldmain.c:1341
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: falló bfd_hash_lookup: %E\n"
+
+#: ldmain.c:1362
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: referencia a `%T' sin definir\n"
+
+#: ldmain.c:1365
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: aviso: referencia a `%T' sin definir\n"
+
+#: ldmain.c:1371
+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:1374
+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:1385
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: referencia a `%T' sin definir\n"
+
+#: ldmain.c:1388
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: aviso: referencia a `%T' sin definir\n"
+
+#: ldmain.c:1394
+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:1397
+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:1436
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " se omitieron desbordamientos de reubicación adicionales de la salida\n"
+
+#: ldmain.c:1449
+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:1454
+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:1466
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " reubicación truncada para ajustar: %s contra `%T'"
+
+#: ldmain.c:1483
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: reubicación peligrosa: %s\n"
+
+#: ldmain.c:1498
+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:147
+#, c-format
+msgid "no symbol"
+msgstr "no hay símbolo"
+
+#: ldmisc.c:238
+#, c-format
+msgid "built in linker script:%u"
+msgstr "guión interno del enlazador:%u"
+
+#: ldmisc.c:294 ldmisc.c:298
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F: no se pueden leer los símbolos\n"
+
+#: ldmisc.c:340
+msgid "%B: In function `%T'"
+msgstr "%B: En la función `%T'"
+
+#: ldmisc.c:510
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: error interno %s %d\n"
+
+#: ldmisc.c:556
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: error interno: abortando en %s línea %d en %s\n"
+
+#: ldmisc.c:559
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: error interno: abortando en %s línea %d\n"
+
+#: ldmisc.c:561
+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:38
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr "GNU ld versión %s\n"
+
+#: ldver.c:42
+#, c-format
+msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgstr "Copyright 2005 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 ""
+"Este programa es software libre; puede redistribuirse bajo los términos de\n"
+"la Licencia Pública General de GNU. Este programa no tiene absolutamente\n"
+"ninguna garantía.\n"
+
+#: ldver.c:52
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Emulaciones con soporte:\n"
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: falló bfd_new_link_order\n"
+
+#: ldwrite.c:344
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: no se puede crear la tabla de división de secciones para %s\n"
+
+#: ldwrite.c:356
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: falló la clonación de la sección: %E\n"
+
+#: ldwrite.c:394
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x algo más\n"
+
+#: ldwrite.c:564
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: falló el enlace final: %E\n"
+
+#: lexsup.c:196 lexsup.c:328
+msgid "KEYWORD"
+msgstr "PALABRA CLAVE"
+
+#: lexsup.c:196
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Control de biblioteca compartida para compatibilidad con HP/UX"
+
+#: lexsup.c:199
+msgid "ARCH"
+msgstr "ARQ"
+
+#: lexsup.c:199
+msgid "Set architecture"
+msgstr "Establecer la arquitectura"
+
+#: lexsup.c:201 lexsup.c:422
+msgid "TARGET"
+msgstr "OBJETIVO"
+
+#: lexsup.c:201
+msgid "Specify target for following input files"
+msgstr "Especificar el objetivo para los siguientes ficheros de entrada"
+
+#: lexsup.c:204 lexsup.c:253 lexsup.c:265 lexsup.c:278 lexsup.c:381
+#: lexsup.c:434 lexsup.c:491
+msgid "FILE"
+msgstr "FICHERO"
+
+#: lexsup.c:204
+msgid "Read MRI format linker script"
+msgstr "Leer el guión del enlazador de formato MRI"
+
+#: lexsup.c:206
+msgid "Force common symbols to be defined"
+msgstr "Forzar que los símbolos comunes sean definidos"
+
+#: lexsup.c:210 lexsup.c:476 lexsup.c:478 lexsup.c:480
+msgid "ADDRESS"
+msgstr "DIRECCIÓN"
+
+#: lexsup.c:210
+msgid "Set start address"
+msgstr "Establecer la dirección de inicio"
+
+#: lexsup.c:212
+msgid "Export all dynamic symbols"
+msgstr "Exportar todos los símbolos dinámicos"
+
+#: lexsup.c:214
+msgid "Link big-endian objects"
+msgstr "Enlazar objetos big-endian"
+
+#: lexsup.c:216
+msgid "Link little-endian objects"
+msgstr "Enlazar objetos little-endian"
+
+#: lexsup.c:218 lexsup.c:221
+msgid "SHLIB"
+msgstr "BIBCOMP"
+
+#: lexsup.c:218
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Filtro auxiliar para la tabla de símbolos de objetos compartidos"
+
+#: lexsup.c:221
+msgid "Filter for shared object symbol table"
+msgstr "Filtro para la tabla de símbolos de objetos compartidos"
+
+#: lexsup.c:224
+msgid "Ignored"
+msgstr "Ignorado"
+
+#: lexsup.c:226
+msgid "SIZE"
+msgstr "TAMAÑO"
+
+#: lexsup.c:226
+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:229
+msgid "FILENAME"
+msgstr "FICHERO"
+
+#: lexsup.c:229
+msgid "Set internal name of shared library"
+msgstr "Establecer el nombre interno de la biblioteca compartida"
+
+#: lexsup.c:231
+msgid "PROGRAM"
+msgstr "PROGRAMA"
+
+#: lexsup.c:231
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Establece el PROGRAMA como el enlazador dinámico a utilizar"
+
+#: lexsup.c:234
+msgid "LIBNAME"
+msgstr "NOMBREBIB"
+
+#: lexsup.c:234
+msgid "Search for library LIBNAME"
+msgstr "Buscar la biblioteca NOMBREBIB"
+
+#: lexsup.c:236
+msgid "DIRECTORY"
+msgstr "DIRECTORIO"
+
+#: lexsup.c:236
+msgid "Add DIRECTORY to library search path"
+msgstr "Agregar el DIRECTORIO a la ruta de búsqueda de bibliotecas"
+
+#: lexsup.c:239
+msgid "Override the default sysroot location"
+msgstr "Sobreescribir la ubicación de sysroot por defecto"
+
+#: lexsup.c:241
+msgid "EMULATION"
+msgstr "EMULACIÓN"
+
+#: lexsup.c:241
+msgid "Set emulation"
+msgstr "Establecer la emulación"
+
+#: lexsup.c:243
+msgid "Print map file on standard output"
+msgstr "Imprimir el fichero mapa en la salida estándar"
+
+#: lexsup.c:245
+msgid "Do not page align data"
+msgstr "No paginar los datos alineados"
+
+#: lexsup.c:247
+msgid "Do not page align data, do not make text readonly"
+msgstr "No paginar los datos alineados, no hacer el texto de sólo lectura"
+
+#: lexsup.c:250
+msgid "Page align data, make text readonly"
+msgstr "Paginar los datos alineados, hacer el texto de sólo lectura"
+
+#: lexsup.c:253
+msgid "Set output file name"
+msgstr "Establecer el nombre del fichero de salida"
+
+#: lexsup.c:255
+msgid "Optimize output file"
+msgstr "Optimizar la salida del fichero"
+
+#: lexsup.c:257
+msgid "Ignored for SVR4 compatibility"
+msgstr "Ignorado por compatibilidad con SVR4"
+
+#: lexsup.c:261
+msgid "Generate relocatable output"
+msgstr "Generar salida reubicable"
+
+#: lexsup.c:265
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Sólo enlazar símbolos (si es un directorio, es igual que --rpath)"
+
+#: lexsup.c:268
+msgid "Strip all symbols"
+msgstr "Descartar todos los símbolos"
+
+#: lexsup.c:270
+msgid "Strip debugging symbols"
+msgstr "Descartar los símbolos de depuración"
+
+#: lexsup.c:272
+msgid "Strip symbols in discarded sections"
+msgstr "Descartar símbolos en las secciones descartadas"
+
+#: lexsup.c:274
+msgid "Do not strip symbols in discarded sections"
+msgstr "No descartar símbolos en las secciones descartadas"
+
+#: lexsup.c:276
+msgid "Trace file opens"
+msgstr "Rastrear la apertura de ficheros"
+
+#: lexsup.c:278
+msgid "Read linker script"
+msgstr "Leer el guión del enlazador"
+
+#: lexsup.c:280 lexsup.c:298 lexsup.c:364 lexsup.c:379 lexsup.c:469
+#: lexsup.c:494 lexsup.c:521
+msgid "SYMBOL"
+msgstr "SÍMBOLO"
+
+#: lexsup.c:280
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Iniciar con una referencia sin definir hacia el SÍMBOLO"
+
+#: lexsup.c:283
+msgid "[=SECTION]"
+msgstr "[=SECCIóN]"
+
+#: lexsup.c:284
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "No mezclar secciones de entrada [SECCIÓN | huérfanas]"
+
+#: lexsup.c:286
+msgid "Build global constructor/destructor tables"
+msgstr "Construir tablas globales de constructores/destructores"
+
+#: lexsup.c:288
+msgid "Print version information"
+msgstr "Mostrar la información de la versión"
+
+#: lexsup.c:290
+msgid "Print version and emulation information"
+msgstr "Mostrar la información de la versión y la emulación"
+
+#: lexsup.c:292
+msgid "Discard all local symbols"
+msgstr "Descartar todos los símbolos locales"
+
+#: lexsup.c:294
+msgid "Discard temporary local symbols (default)"
+msgstr "Descartar los símbolos locales temporales (por defecto)"
+
+#: lexsup.c:296
+msgid "Don't discard any local symbols"
+msgstr "No descartar ningún símbolo local"
+
+#: lexsup.c:298
+msgid "Trace mentions of SYMBOL"
+msgstr "Rastrear las menciones del SÍMBOLO"
+
+#: lexsup.c:300 lexsup.c:436 lexsup.c:438
+msgid "PATH"
+msgstr "RUTA"
+
+#: lexsup.c:300
+msgid "Default search path for Solaris compatibility"
+msgstr "Ruta de búsqueda por defecto para compatibilidad con Solaris"
+
+#: lexsup.c:303
+msgid "Start a group"
+msgstr "Iniciar un grupo"
+
+#: lexsup.c:305
+msgid "End a group"
+msgstr "Terminar un grupo"
+
+#: lexsup.c:309
+msgid "Accept input files whose architecture cannot be determined"
+msgstr "Aceptar ficheros de entrada cuya arquitectura no se pueda determinar"
+
+#: lexsup.c:313
+msgid "Reject input files whose architecture is unknown"
+msgstr "Rechazar ficheros de entrada cuya arquitectura es desconocida"
+
+#: lexsup.c:316
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+"\t\t\t\tfollowing dynamic libs"
+msgstr ""
+"Establece las marcas DT_NEEDED para las entradas DT_NEEDED en\n"
+"\t\t\t\tlas bibliotecas dinámicas a continuación"
+
+#: lexsup.c:319
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+"No establece las marcas DT_NEEDED para las entradas DT_NEEDED en\n"
+"\t\t\t\tlas bibliotecas dinámicas a continuación"
+
+#: lexsup.c:322
+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:325
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr "Siempre establece DT_NEEDED para las siguientes bibliotecas dinámicas"
+
+#: lexsup.c:328
+msgid "Ignored for SunOS compatibility"
+msgstr "Ignorado por compatibilidad con SunOS"
+
+#: lexsup.c:330
+msgid "Link against shared libraries"
+msgstr "Enlazar contra bibliotecas compartidas"
+
+#: lexsup.c:336
+msgid "Do not link against shared libraries"
+msgstr "No enlazar contra bibliotecas compartidas"
+
+#: lexsup.c:344
+msgid "Bind global references locally"
+msgstr "Asociar localmente las referencias globlales"
+
+#: lexsup.c:346
+msgid "Check section addresses for overlaps (default)"
+msgstr "Revisar las direcciones de las secciones por traslapes (por defecto)"
+
+#: lexsup.c:349
+msgid "Do not check section addresses for overlaps"
+msgstr "No revisar las direcciones de las secciones por traslapes"
+
+#: lexsup.c:352
+msgid "Output cross reference table"
+msgstr "Mostrar la tabla de referencias cruzadas"
+
+#: lexsup.c:354
+msgid "SYMBOL=EXPRESSION"
+msgstr "SÍMBOLO=EXPRESIÓN"
+
+#: lexsup.c:354
+msgid "Define a symbol"
+msgstr "Define un símbolo"
+
+#: lexsup.c:356
+msgid "[=STYLE]"
+msgstr "[=ESTILO]"
+
+#: lexsup.c:356
+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:359
+msgid "Generate embedded relocs"
+msgstr "Genera reubicaciones imbuídas"
+
+#: lexsup.c:361
+msgid "Treat warnings as errors"
+msgstr "Tratar los avisos como errores"
+
+#: lexsup.c:364
+msgid "Call SYMBOL at unload-time"
+msgstr "Llamar al SÍMBOLO al momento de descargar"
+
+#: lexsup.c:366
+msgid "Force generation of file with .exe suffix"
+msgstr "Forzar la generación del fichero con sufijo .exe"
+
+#: lexsup.c:368
+msgid "Remove unused sections (on some targets)"
+msgstr "Eliminar las secciones sin uso (en algunos objetivos)"
+
+#: lexsup.c:371
+msgid "Don't remove unused sections (default)"
+msgstr "No eliminar las secciones sin uso (por defecto)"
+
+#: lexsup.c:374
+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:377
+msgid "Print option help"
+msgstr "Muestra la ayuda de opciones"
+
+#: lexsup.c:379
+msgid "Call SYMBOL at load-time"
+msgstr "Llamar al SÍMBOLO al momento de cargar"
+
+#: lexsup.c:381
+msgid "Write a map file"
+msgstr "Escribir un fichero mapa"
+
+#: lexsup.c:383
+msgid "Do not define Common storage"
+msgstr "No definir almacenamiento Common"
+
+#: lexsup.c:385
+msgid "Do not demangle symbol names"
+msgstr "No desenredar los nombres de los símbolos"
+
+#: lexsup.c:387
+msgid "Use less memory and more disk I/O"
+msgstr "Usar menos memoria y más E/S de disco"
+
+#: lexsup.c:389
+msgid "Do not allow unresolved references in object files"
+msgstr "No permitir referencias sin resolver en ficheros objeto"
+
+#: lexsup.c:392
+msgid "Allow unresolved references in shared libaries"
+msgstr "Permitir referencias sin resolver en bibliotecas compartidas"
+
+#: lexsup.c:396
+msgid "Do not allow unresolved references in shared libs"
+msgstr "No permitir referencias sin resolver en bibliotecas compartidas"
+
+#: lexsup.c:400
+msgid "Allow multiple definitions"
+msgstr "Permitir definiciones múltiples"
+
+#: lexsup.c:402
+msgid "Disallow undefined version"
+msgstr "No permitir versiones sin definir"
+
+#: lexsup.c:404
+msgid "Create default symbol version"
+msgstr "Crear la versión de símbolo por defecto"
+
+#: lexsup.c:407
+msgid "Create default symbol version for imported symbols"
+msgstr "Crear la versión de símbolo por defecto para símbolos importados"
+
+#: lexsup.c:410
+msgid "Don't warn about mismatched input files"
+msgstr "No avisar sobre ficheros de entrada sin coincidencia"
+
+#: lexsup.c:412
+msgid "Turn off --whole-archive"
+msgstr "Apagar --whole-archive"
+
+#: lexsup.c:414
+msgid "Create an output file even if errors occur"
+msgstr "Crear un fichero de salida aún si ocurren errores"
+
+#: lexsup.c:419
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"Utilizar solamente los directorios de bibliotecas\n"
+"\t\t\t\tespecificados en la línea de comandos"
+
+#: lexsup.c:422
+msgid "Specify target of output file"
+msgstr "Especificar el objetivo del fichero de salida"
+
+#: lexsup.c:425
+msgid "Ignored for Linux compatibility"
+msgstr "Ignorado por compatibilidad con Linux"
+
+#: lexsup.c:428
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Reducir las saturaciones de memoria, tal vez tomando más tiempo"
+
+#: lexsup.c:431
+msgid "Relax branches on certain targets"
+msgstr "Relajar ramificaciones en ciertos objetivos"
+
+#: lexsup.c:434
+msgid "Keep only symbols listed in FILE"
+msgstr "Conservar solamente los símbolos enlistados en el FICHERO"
+
+#: lexsup.c:436
+msgid "Set runtime shared library search path"
+msgstr "Establecer la rúta de búsqueda de bibliotecas compartidas en tiempo de ejecución"
+
+#: lexsup.c:438
+msgid "Set link time shared library search path"
+msgstr "Establecer la rúta de búsqueda de bibliotecas compartidas en tiempo de enlace"
+
+#: lexsup.c:441
+msgid "Create a shared library"
+msgstr "Crear una biblioteca compartida"
+
+#: lexsup.c:445
+msgid "Create a position independent executable"
+msgstr "Crear un ejecutable independiente de posición"
+
+#: lexsup.c:449
+msgid "Sort common symbols by size"
+msgstr "Ordenar los símbolos comunes por tamaño"
+
+#: lexsup.c:453
+msgid "name|alignment"
+msgstr "nombre|alineación"
+
+#: lexsup.c:454
+msgid "Sort sections by name or maximum alignment"
+msgstr "Ordenar secciones por nombre o alineación máxima"
+
+#: lexsup.c:456
+msgid "COUNT"
+msgstr "CUENTA"
+
+#: lexsup.c:456
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Cúantas marcas reservar en la sección .dynamic"
+
+#: lexsup.c:459
+msgid "[=SIZE]"
+msgstr "[=TAMAÑO]"
+
+#: lexsup.c:459
+msgid "Split output sections every SIZE octets"
+msgstr "Dividir las secciones de salida cada TAMAÑO octetos"
+
+#: lexsup.c:462
+msgid "[=COUNT]"
+msgstr "[=CUENTA]"
+
+#: lexsup.c:462
+msgid "Split output sections every COUNT relocs"
+msgstr "Dividir las secciones de salida cada CUENTA reubicaciones"
+
+#: lexsup.c:465
+msgid "Print memory usage statistics"
+msgstr "Mostrar las estadísticas de uso de memoria"
+
+#: lexsup.c:467
+msgid "Display target specific options"
+msgstr "Mostrar las opciones específicas del objetivo"
+
+#: lexsup.c:469
+msgid "Do task level linking"
+msgstr "Enlazar a nivel de tarea"
+
+#: lexsup.c:471
+msgid "Use same format as native linker"
+msgstr "Usar el mismo formato que el enlazador nativo"
+
+#: lexsup.c:473
+msgid "SECTION=ADDRESS"
+msgstr "SECCIÓN=DIRECCIÓN"
+
+#: lexsup.c:473
+msgid "Set address of named section"
+msgstr "Establecer la dirección de la sección nombrada"
+
+#: lexsup.c:476
+msgid "Set address of .bss section"
+msgstr "Establecer la dirección de la sección .bss"
+
+#: lexsup.c:478
+msgid "Set address of .data section"
+msgstr "Establecer la dirección de la sección .data"
+
+#: lexsup.c:480
+msgid "Set address of .text section"
+msgstr "Establecer la dirección de la sección .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 ""
+"Cómo manejar símbolos sin resolver. <método> es:\n"
+"\t\t\t\tignore-all, report-all, ignore-in-object-files,\n"
+"\t\t\t\tignore-in-shared-libs"
+
+#: lexsup.c:487
+msgid "Output lots of information during link"
+msgstr "Mostrar mucha información durante el enlace"
+
+#: lexsup.c:491
+msgid "Read version information script"
+msgstr "Leer la información de la versión del guión"
+
+#: lexsup.c:494
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"Tomar la lista de exportación de símbolos de .exports, usando\n"
+"\t\t\tel SÍMBOLO como la versión."
+
+#: lexsup.c:497
+msgid "Warn about duplicate common symbols"
+msgstr "Avisar sobre símbolos comunes duplicados"
+
+#: lexsup.c:499
+msgid "Warn if global constructors/destructors are seen"
+msgstr "Avisar si se ven constructores/destructores globales"
+
+#: lexsup.c:502
+msgid "Warn if the multiple GP values are used"
+msgstr "Avisar si se usan los valores múltiples GP"
+
+#: lexsup.c:504
+msgid "Warn only once per undefined symbol"
+msgstr "Avisar sólo una vez por cada símbolo sin definir"
+
+#: lexsup.c:506
+msgid "Warn if start of section changes due to alignment"
+msgstr "Avisar si el inicio de la sección cambia debido a la alineación"
+
+#: lexsup.c:509
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Avisar si el objeto compartido tiene DT_TEXTREL"
+
+#: lexsup.c:513
+msgid "Report unresolved symbols as warnings"
+msgstr "Reportar símbolos sin resolver como avisos"
+
+#: lexsup.c:516
+msgid "Report unresolved symbols as errors"
+msgstr "Reportar símbolos sin resolver como errores"
+
+#: lexsup.c:518
+msgid "Include all objects from following archives"
+msgstr "Incluir todos los objetos de los siguientes ficheros"
+
+#: lexsup.c:521
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Usar funciones de envoltura para el SÍMBOLO"
+
+#: lexsup.c:668
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: opción `%s' no reconocida\n"
+
+#: lexsup.c:670
+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:688
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: opción -a `%s' no reconocida\n"
+
+#: lexsup.c:701
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: opción -assert `%s' no reconocida\n"
+
+#: lexsup.c:744
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: estilo de desenredo `%s' desconocido"
+
+#: lexsup.c:806
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: número `%s' inválido\n"
+
+#: lexsup.c:898
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: opción --unresolved-symbols no reconocida: %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: opción -rpath errónea\n"
+
+#: lexsup.c:1081
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: -shared no tiene soporte\n"
+
+#: lexsup.c:1090
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: -pie no tiene soporte\n"
+
+#: lexsup.c:1100
+msgid "name"
+msgstr "nombre"
+
+#: lexsup.c:1102
+msgid "alignment"
+msgstr "alineación"
+
+#: lexsup.c:1105
+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:1131
+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:1138
+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:1312
+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"
+
+#: lexsup.c:1319
+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:1347
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: --hash-size necesita un argumento numérico\n"
+
+#: lexsup.c:1398 lexsup.c:1411
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: número hexadecimal `%s' inválido\n"
+
+#: lexsup.c:1447
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Modo de empleo: %s [opciones] fichero...\n"
+
+#: lexsup.c:1449
+#, c-format
+msgid "Options:\n"
+msgstr "Opciones:\n"
+
+#: lexsup.c:1527
+#, c-format
+msgid " @FILE"
+msgstr " @FICHERO"
+
+#: lexsup.c:1530
+#, 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:1535
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: objetivos con soporte:"
+
+#: lexsup.c:1543
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: emulaciones con soporte: "
+
+#: lexsup.c:1548
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: opciones específicas de emulación:\n"
+
+#: lexsup.c:1552
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Reportar bichos a %s\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: tipo de formato %s desconocido\n"
+
+#: pe-dll.c:303
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XArquitectura PEI sin soporte: %s\n"
+
+#: pe-dll.c:604
+#, 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:657
+#, 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:664
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Aviso, EXPORT duplicado: %s\n"
+
+#: pe-dll.c:751
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XNo se puede exportar %s: símbolo no definido\n"
+
+#: pe-dll.c:757
+#, 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:764
+#, 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:877
+#, 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:1219
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XError: reubicación de %d-bit en la dll\n"
+
+#: pe-dll.c:1347
+#, 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:1490
+#, c-format
+msgid "; no contents available\n"
+msgstr "; no hay contenido disponible\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: 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:2282
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XNo se puede abrir el fichero .lib: %s\n"
+
+#: pe-dll.c:2287
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Creando el fichero de biblioteca: %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 " unless user specifies one\n"
+#~ msgstr " a menos que el usuario especifique alguna\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 " in preference to lib<basename>.dll \n"
+#~ msgstr " en lugar de lib<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.17/ld/po/fr.gmo b/binutils-2.17/ld/po/fr.gmo
new file mode 100644
index 00000000..e67b1c1b
--- /dev/null
+++ b/binutils-2.17/ld/po/fr.gmo
Binary files differ
diff --git a/binutils-2.17/ld/po/fr.po b/binutils-2.17/ld/po/fr.po
new file mode 100644
index 00000000..2b07f861
--- /dev/null
+++ b/binutils-2.17/ld/po/fr.po
@@ -0,0 +1,1987 @@
+# 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.15.96\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-03-03 21:05+1030\n"
+"PO-Revision-Date: 2005-03-23 08:00-0500\n"
+"Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\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:188 emultempl/pe.em:1455
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr "%P: AVERTISSEMENT: « --thumb-entry %s » écrase « -e %s »\n"
+
+#: emultempl/armcoff.em:193 emultempl/pe.em:1460
+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:301
+#, 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:302
+#, 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:303
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <taille> initialiser l'alignement du fichier\n"
+
+#: emultempl/pe.em:304
+#, 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:305
+#, 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:306
+#, 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:307
+#, 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:308
+#, 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:309
+#, 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:310
+#, 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:311
+#, 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:312
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <taille> initialiser l'alignement de section\n"
+
+#: emultempl/pe.em:313
+#, 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:314
+#, 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:315
+#, 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:316
+#, 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:318
+#, 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:319
+#, 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:320
+#, 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:321
+#, 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:322
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs libs,lib,... exclure les librairies lors l'exportation automatique\n"
+
+#: emultempl/pe.em:323
+#, 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:324
+#, 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:325
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr " --out-implib <fichier> générer la librairie d'importation\n"
+
+#: emultempl/pe.em:326
+#, 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:327
+#, 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:328
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+" --compat-implib créer des librairies d'importation avec\n"
+" compatibilité arrière; \n"
+" créer __imp_<SYMBOL> aussi\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 automatiquement choisir l'image de base pour les DLL\n"
+" à moins que l'usager en ait spécifié une\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 ne pas choisir automatiquement l'image de base (par défaut)\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=<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:336
+#, 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:338
+#, 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:339
+#, 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:342
+#, 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: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 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:347
+#, 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:414
+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:445
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr "%P%F: type de sous-système invalide %s\n"
+
+#: emultempl/pe.em:484
+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:501
+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:518
+#, 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:734
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: AVERTISSEMENT, alignement de fichier > alignement de section\n"
+
+#: emultempl/pe.em:821 emultempl/pe.em:848
+#, 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:826 emultempl/pe.em:853
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Utiliser --enable-stdcall-fixup pour inhiber les avertissements\n"
+
+#: emultempl/pe.em:827 emultempl/pe.em:854
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Utiliser --disable-stdcall-fixup pour inhiber les correctifs\n"
+
+#: emultempl/pe.em:873
+#, 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:910
+#, 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:983
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr "%F%P: operations PE sur des fichiers non PE.\n"
+
+#: emultempl/pe.em:1258
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr "Erreurs rencontrées lors du traitement du fichier %s\n"
+
+#: emultempl/pe.em:1281
+#, 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: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 en échec: %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 de la tacle cref en échec: %E\n"
+
+#: ldcref.c:159
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: cref_hash_lookup en échec: %E\n"
+
+#: ldcref.c:225
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Table de référence croisé\n"
+"\n"
+
+#: ldcref.c:226
+msgid "Symbol"
+msgstr "Symbole"
+
+#: ldcref.c:234
+#, c-format
+msgid "File\n"
+msgstr "Fichier\n"
+
+#: ldcref.c:238
+#, c-format
+msgid "No symbols\n"
+msgstr "Aucun symbol\n"
+
+#: ldcref.c:359 ldcref.c:478
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: ne peut lire les symboles; %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: ne peut lire les symboles: %E\n"
+
+#: ldcref.c:414
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: symbole « %T » manquant dans la table de hachage principale\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: 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:573
+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:227
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB ignoré\n"
+
+#: ldemul.c:233
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL ignoré\n"
+
+#: ldemul.c:253
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: mode d'émulation non reconnu: %s\n"
+
+#: ldemul.c:254
+msgid "Supported emulations: "
+msgstr "Émulations supportées: "
+
+#: ldemul.c:296
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr " aucune option spécifique d'émulation.\n"
+
+#: ldexp.c:379
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% par zéro\n"
+
+#: ldexp.c:386
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / by zéro\n"
+
+#: ldexp.c:583
+#, 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:604
+#, 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:665 ldexp.c:678
+#, 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:757
+#, 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:770
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S affection invalide au compteur de localisation\n"
+
+#: ldexp.c:774
+#, 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:783
+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:810
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: création de la table de hachage en échec\n"
+
+#: ldexp.c:1077 ldexp.c:1109
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S expression d'une non constante: %s\n"
+
+#: ldexp.c:1163
+#, c-format
+msgid "%F%S non constant expression for %s\n"
+msgstr "%F%S expression de non constante: %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:255 ldfile.c:282
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: escamotage incompatible %s lors de la recherche de %s\n"
+
+#: ldfile.c:267
+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:384
+msgid "%F%P: %s (%s): No such file: %E\n"
+msgstr "%F%P: %s (%s): pas de fichier tel: %E\n"
+
+#: ldfile.c:387
+msgid "%F%P: %s: No such file: %E\n"
+msgstr "%F%P: %s: pas de fichier tel: %E\n"
+
+#: ldfile.c:417
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: ne peut trouver %s à l'intérieur de %s\n"
+
+#: ldfile.c:420
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: ne peut trouver %s\n"
+
+#: ldfile.c:437 ldfile.c:453
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "ne peut repérer le fichier de scripts %s\n"
+
+#: ldfile.c:439 ldfile.c:455
+#, c-format
+msgid "opened script file %s\n"
+msgstr "fichier de scripts ouvert %s\n"
+
+#: ldfile.c:499
+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:546
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: ne peut représenter la machine « %s »\n"
+
+#: ldlang.c:511
+msgid "%P%F: out of memory during initialization"
+msgstr "%P%F: mémoire épuisée durant l'initialisation"
+
+#: ldlang.c:551
+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:557
+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:1073
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Configuration mémoire\n"
+"\n"
+
+#: ldlang.c:1075
+msgid "Name"
+msgstr "Nom"
+
+#: ldlang.c:1075
+msgid "Origin"
+msgstr "Origine"
+
+#: ldlang.c:1075
+msgid "Length"
+msgstr "Longueur"
+
+#: ldlang.c:1075
+msgid "Attributes"
+msgstr "Attributs"
+
+#: ldlang.c:1115
+#, 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:1183
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr "%P%F: utilisation illégale de la section « %s »\n"
+
+#: ldlang.c:1193
+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:1775
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: fichier non reconnue: %E\n"
+
+#: ldlang.c:1776
+msgid "%B: matching formats:"
+msgstr "%B: formats concordants:"
+
+#: ldlang.c:1783
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: fichier non reconnu: %E\n"
+
+#: ldlang.c:1847
+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:1858 ldlang.c:1872
+msgid "%F%B: could not read symbols: %E\n"
+msgstr "%F%B: ne peut lire les symboles: %E\n"
+
+#: ldlang.c:2127
+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:2141
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: cible %s non trouvée\n"
+
+#: ldlang.c:2143
+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:2149
+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:2153
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: ne peut initialiser l'architecture: %E\n"
+
+#: ldlang.c:2157
+msgid "%P%F: can not create link hash table: %E\n"
+msgstr "%P%F: ne peut créer un lien vers la table de hachage: %E\n"
+
+#: ldlang.c:2301
+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:2319
+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:2710
+msgid " load address 0x%V"
+msgstr " address de chargement 0x%V"
+
+#: ldlang.c:2874
+msgid "%W (size before relaxing)\n"
+msgstr "%W (taille avant relaxe)\n"
+
+#: ldlang.c:2961
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Adresse de la section %s initialisé à "
+
+#: ldlang.c:3114
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Échec avec %d\n"
+
+#: ldlang.c:3351
+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:3379
+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:3388
+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:3439
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: erreur interne dans la section partagée de la librairie de COFF %s\n"
+
+#: ldlang.c:3493
+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:3498
+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:3515
+msgid "%P: warning: changing start of section %s by %u bytes\n"
+msgstr "%P: AVERTISSEMENT: modification du début de section %s de %u octets\n"
+
+#: ldlang.c:3532
+#, 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:3703
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: ne peut relâcher la section: %E\n"
+
+#: ldlang.c:3960
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: déclaration invalide de données\n"
+
+#: ldlang.c:3999
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: déclaration invalide de relocalisation\n"
+
+#: ldlang.c:4141
+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:4154 ldlang.c:4173
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: ne peut initialiser l'adresse de départ\n"
+
+#: ldlang.c:4166
+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:4178
+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:4227
+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:4237
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P: AVERTISSEMENT: architecture %s du fichier d'entrée « %B » est incompatible avec la sortie %s\n"
+
+#: ldlang.c:4259
+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:4343
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Allocation des symboles communs\n"
+
+#: ldlang.c:4344
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Symbole commun taille fichier\n"
+"\n"
+
+#: ldlang.c:4470
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: syntaxe invalide dans les fanions\n"
+
+#: ldlang.c:4740
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: échec de création de la table de hachage\n"
+
+#: ldlang.c:5057
+msgid "%P%Fmultiple STARTUP files\n"
+msgstr "%P%F fichiers multiples de DÉPART\n"
+
+#: ldlang.c:5105
+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:5345
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: bfd_record_phdr en échec: %E\n"
+
+#: ldlang.c:5365
+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:5751
+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:5893
+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:5902
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: duplication de l'étiquette de version « %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: duplication de l'expression « %s » dans l'information de version\n"
+
+#: ldlang.c:5998
+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:6020
+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:229
+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:341
+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:343
+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:347
+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"
+
+#: ldmain.c:352
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr "%P%F: -F ne peut être utilisé sans -shared\n"
+
+#: ldmain.c:354
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr "%P%F: -f ne peut être utilisé sans -shared\n"
+
+#: ldmain.c:396
+msgid "using external linker script:"
+msgstr "utilisation du script externe d'édition de liens:"
+
+#: ldmain.c:398
+msgid "using internal linker script:"
+msgstr "utilisation du script interne d'édition de liens:"
+
+#: ldmain.c:432
+msgid "%P%F: no input files\n"
+msgstr "%P%F: aucun fichier d'entrée\n"
+
+#: ldmain.c:436
+msgid "%P: mode %s\n"
+msgstr "%P: mode %s\n"
+
+#: ldmain.c:452
+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:482
+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:491
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: fermeture finale en échec: %E\n"
+
+#: ldmain.c:517
+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:520
+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:527
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: erreur lors de l'écriture du fichier « %s »\n"
+
+#: ldmain.c:532 pe-dll.c:1447
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: erreur lors de la fermeture du fichier « %s »\n"
+
+#: ldmain.c:548
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: temps total d'édition de liens: %ld.%06ld\n"
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: tailles des données %ld\n"
+
+#: ldmain.c:634
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: argument manquant pour -m\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 en échec: %E\n"
+
+#: ldmain.c:784 ldmain.c:802
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: bfd_hash_lookup en échec: %E\n"
+
+#: ldmain.c:816
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr "%X%P: erreur: duplication dans retain-symbols-file\n"
+
+#: ldmain.c:858
+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:863
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr "%P: « -retain-symbols-file » écrase les options « -s » et « -S »\n"
+
+#: ldmain.c:938
+#, 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:1008
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: définitions multiples de « %T »\n"
+
+#: ldmain.c:1011
+msgid "%D: first defined here\n"
+msgstr "%D: défini pour la première fois ici\n"
+
+#: ldmain.c:1015
+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:1045
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: AVERTISSEMENT: définition de « %T » écrase le commun\n"
+
+#: ldmain.c:1048
+msgid "%B: warning: common is here\n"
+msgstr "%B: AVERTISSEMENT: le commun est ici\n"
+
+#: ldmain.c:1055
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: AVERTISSEMENT: le commun de « %T » écrasé par définition\n"
+
+#: ldmain.c:1058
+msgid "%B: warning: defined here\n"
+msgstr "%B: AVERTISSEMENT: défini ici\n"
+
+#: ldmain.c:1065
+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:1068
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: AVERTISSEMENT: le commun de plus grande taille est ici\n"
+
+#: ldmain.c:1072
+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:1075
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: AVERTISSEMENT: le commun de plus petite taille est ici\n"
+
+#: ldmain.c:1079
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: AVERTISSEMENT: communs multiples de « %T »\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: AVERTISSEMENT: commun précédent est ici\n"
+
+#: ldmain.c:1101 ldmain.c:1139
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: AVERTISSEMENT: constructeur global %s est utilisé\n"
+
+#: ldmain.c:1149
+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:1203 ldmain.c:1205 ldmain.c:1207 ldmain.c:1245 ldmain.c:1293
+msgid "warning: "
+msgstr "AVERTISSEMENT: "
+
+#: ldmain.c:1327
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: bfd_hash_table_init en échec: %E\n"
+
+#: ldmain.c:1334
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: bfd_hash_lookup en échec: %E\n"
+
+#: ldmain.c:1355
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: référence indéfinie vers « %T »\n"
+
+#: ldmain.c:1358
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: AVERTISSEMENT: référence indéfinie vers « %T »\n"
+
+#: ldmain.c:1364
+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:1367
+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:1378
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: référence indéfinie vers « %T »\n"
+
+#: ldmain.c:1381
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: AVERTISSMENT: référence indéfinie vers « %T »\n"
+
+#: ldmain.c:1387
+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:1390
+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:1425 ldmain.c:1478 ldmain.c:1496
+msgid "%P%X: generated"
+msgstr "%P%X: généré"
+
+#: ldmain.c:1432
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " débordement de relocalisation additionnelle omise à partir de la sortie\n"
+
+#: ldmain.c:1445
+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:1450
+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:1460
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " relocalisation tronquée pour concorder: %s avec %T"
+
+#: ldmain.c:1481
+#, c-format
+msgid "dangerous relocation: %s\n"
+msgstr "relocalisation dangereuse: %s\n"
+
+#: ldmain.c:1499
+msgid " reloc refers to symbol `%T' which is not being output\n"
+msgstr " relocalisation réfère au symbole « %T » qui n'a pas été sorti\n"
+
+#: ldmisc.c:149
+#, c-format
+msgid "no symbol"
+msgstr "aucun symbole"
+
+#: ldmisc.c:240
+#, c-format
+msgid "built in linker script:%u"
+msgstr "construit dans le script d'édition de liens:%u"
+
+#: ldmisc.c:289 ldmisc.c:293
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F: ne peut lire les symboles\n"
+
+#: ldmisc.c:329
+msgid "%B: In function `%T':\n"
+msgstr "%B: dans la fonction « %T »:\n"
+
+#: ldmisc.c:480
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: erreur interne %s %d\n"
+
+#: ldmisc.c:526
+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:529
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: erreur interne: arrêt immédiat à %s ligne %d\n"
+
+#: ldmisc.c:531
+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:38
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr "GNU ld version %s\n"
+
+#: ldver.c:42
+#, c-format
+msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgstr "Copyright 2005 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 ""
+"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:52
+#, 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:341
+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:353
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: section clone en échec: %E\n"
+
+#: ldwrite.c:391
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x quelque chose d'autre\n"
+
+#: ldwrite.c:561
+msgid "%F%P: final link failed: %E\n"
+msgstr "%F%P: édition de lien finale en échec: %E\n"
+
+#: lexsup.c:195 lexsup.c:327
+msgid "KEYWORD"
+msgstr "MOT CLÉ"
+
+#: lexsup.c:195
+msgid "Shared library control for HP/UX compatibility"
+msgstr "Librairie partagée de contrôle pour compatibilité HP/UX"
+
+#: lexsup.c:198
+msgid "ARCH"
+msgstr "ARCH"
+
+#: lexsup.c:198
+msgid "Set architecture"
+msgstr "Initilisé l'architecture"
+
+#: lexsup.c:200 lexsup.c:421
+msgid "TARGET"
+msgstr "CIBLE"
+
+#: lexsup.c:200
+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:203 lexsup.c:252 lexsup.c:264 lexsup.c:277 lexsup.c:380
+#: lexsup.c:433 lexsup.c:490
+msgid "FILE"
+msgstr "FICHIER"
+
+#: lexsup.c:203
+msgid "Read MRI format linker script"
+msgstr "Lecture du format MRI du script de l'éditeur de liens"
+
+#: lexsup.c:205
+msgid "Force common symbols to be defined"
+msgstr "Forcer les symboles communs à être définis"
+
+#: lexsup.c:209 lexsup.c:475 lexsup.c:477 lexsup.c:479
+msgid "ADDRESS"
+msgstr "ADRESSE"
+
+#: lexsup.c:209
+msgid "Set start address"
+msgstr "Initialiser l'adresse de début"
+
+#: lexsup.c:211
+msgid "Export all dynamic symbols"
+msgstr "Exportation de tous les symboles dynamiques"
+
+#: lexsup.c:213
+msgid "Link big-endian objects"
+msgstr "Lier les objets pour les systèmes à octet de poids fort (big endian)"
+
+#: lexsup.c:215
+msgid "Link little-endian objects"
+msgstr "Lier les objets pour les systèmes à octets de poids faible (little endian)"
+
+#: lexsup.c:217 lexsup.c:220
+msgid "SHLIB"
+msgstr "LIBRAIRIE COMMMUNE (SHLIB)"
+
+#: lexsup.c:217
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Filtre auxiliaire de la table de symboles de l'objet partagé"
+
+#: lexsup.c:220
+msgid "Filter for shared object symbol table"
+msgstr "Filtre de la table de symboles de l'objet partagé"
+
+#: lexsup.c:223
+msgid "Ignored"
+msgstr "Ignoré"
+
+#: lexsup.c:225
+msgid "SIZE"
+msgstr "TAILLE"
+
+#: lexsup.c:225
+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:228
+msgid "FILENAME"
+msgstr "NOM DE FICHIER"
+
+#: lexsup.c:228
+msgid "Set internal name of shared library"
+msgstr "Initialisé le nom interne de la librairie partagée"
+
+#: lexsup.c:230
+msgid "PROGRAM"
+msgstr "PROGRAMME"
+
+#: lexsup.c:230
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Utiliser le PROGRAM comme éditeur de liens dynamique"
+
+#: lexsup.c:233
+msgid "LIBNAME"
+msgstr "NOM de LIBRAIRIE"
+
+#: lexsup.c:233
+msgid "Search for library LIBNAME"
+msgstr "Recherche de la librairie LIBNAME"
+
+#: lexsup.c:235
+msgid "DIRECTORY"
+msgstr "RÉPERTOIRE"
+
+#: lexsup.c:235
+msgid "Add DIRECTORY to library search path"
+msgstr "Ajout du RÉPERTOIRE au chemin de recherche de librairie"
+
+#: lexsup.c:238
+msgid "Override the default sysroot location"
+msgstr "Localisation de sysroot par défaut est écrasée"
+
+#: lexsup.c:240
+msgid "EMULATION"
+msgstr "ÉMULATION"
+
+#: lexsup.c:240
+msgid "Set emulation"
+msgstr "Initialisation de l'émuilation"
+
+#: lexsup.c:242
+msgid "Print map file on standard output"
+msgstr "Afficher le fichier de projection sur la sortie standard"
+
+#: lexsup.c:244
+msgid "Do not page align data"
+msgstr "Ne pas paginer l'alignement des données"
+
+#: lexsup.c:246
+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:249
+msgid "Page align data, make text readonly"
+msgstr "Données d'alignement de page, texte en mis en mode lecture seulement"
+
+#: lexsup.c:252
+msgid "Set output file name"
+msgstr "Initialisé le nom du fichier de sortie"
+
+#: lexsup.c:254
+msgid "Optimize output file"
+msgstr "Optimisé le fichier de sortie"
+
+#: lexsup.c:256
+msgid "Ignored for SVR4 compatibility"
+msgstr "Ignoré pour la compatibilité avec SVR4"
+
+#: lexsup.c:260
+msgid "Generate relocatable output"
+msgstr "Générer une sortie relocalisable"
+
+#: lexsup.c:264
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Juste lier les symboles (si répertoire, identique à --rpath)"
+
+#: lexsup.c:267
+msgid "Strip all symbols"
+msgstr "Élaguer tous les symboles"
+
+#: lexsup.c:269
+msgid "Strip debugging symbols"
+msgstr "Élaguer tous les symboles de débug"
+
+#: lexsup.c:271
+msgid "Strip symbols in discarded sections"
+msgstr "Éliminer les symboles des sections éliminées"
+
+#: lexsup.c:273
+msgid "Do not strip symbols in discarded sections"
+msgstr "Ne pas éliminer les symboles des sections éliminées"
+
+#: lexsup.c:275
+msgid "Trace file opens"
+msgstr "Ouverture des fichiers de trace"
+
+#: lexsup.c:277
+msgid "Read linker script"
+msgstr "Lecture du script de l'éditeur de lien"
+
+#: lexsup.c:279 lexsup.c:297 lexsup.c:363 lexsup.c:378 lexsup.c:468
+#: lexsup.c:493 lexsup.c:520
+msgid "SYMBOL"
+msgstr "SYMBOLE"
+
+#: lexsup.c:279
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Débuter avec une référence indéfinie au SYMBOLE"
+
+#: lexsup.c:282
+msgid "[=SECTION]"
+msgstr "[=SECTION]"
+
+#: lexsup.c:283
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Ne pas fusionner les sections d'entrée [SECTION | orpheline]"
+
+#: lexsup.c:285
+msgid "Build global constructor/destructor tables"
+msgstr "Bâtir les tables de constructeurs/destructeurs globaux"
+
+#: lexsup.c:287
+msgid "Print version information"
+msgstr "Afficher les informations de version"
+
+#: lexsup.c:289
+msgid "Print version and emulation information"
+msgstr "Afficher les information de version et d'émulation"
+
+#: lexsup.c:291
+msgid "Discard all local symbols"
+msgstr "Ignorer tous les symboles locaux"
+
+#: lexsup.c:293
+msgid "Discard temporary local symbols (default)"
+msgstr "Ignorer tous les symboles locaux temporaires (par défaut)"
+
+#: lexsup.c:295
+msgid "Don't discard any local symbols"
+msgstr "Ne pas ignorer tous les symboles locaux"
+
+#: lexsup.c:297
+msgid "Trace mentions of SYMBOL"
+msgstr "Tracer les mentions de SYMBOLE"
+
+#: lexsup.c:299 lexsup.c:435 lexsup.c:437
+msgid "PATH"
+msgstr "CHEMIN"
+
+#: lexsup.c:299
+msgid "Default search path for Solaris compatibility"
+msgstr "Chemin par défaut de recherche pour la compatibilité Solaris"
+
+#: lexsup.c:302
+msgid "Start a group"
+msgstr "Débuter un groupe"
+
+#: lexsup.c:304
+msgid "End a group"
+msgstr "Terminer un groupe"
+
+#: lexsup.c:308
+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:312
+msgid "Reject input files whose architecture is unknown"
+msgstr "Rejeter les fichiers à l'entrée dont l'architecture est inconnue"
+
+#: lexsup.c:315
+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 librairies dynamiques"
+
+#: lexsup.c:318
+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 librairies dynamiques"
+
+#: lexsup.c:321
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr "Initialiser seulement DT_NEEDED pour les librairies dynamiques suivantes si utilisées"
+
+#: lexsup.c:324
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr "Toujours initialiser DT_NEEDED pour les librairies dynamiques suivantes"
+
+#: lexsup.c:327
+msgid "Ignored for SunOS compatibility"
+msgstr "Ignoré pour la compatibilité avec SunOS"
+
+#: lexsup.c:329
+msgid "Link against shared libraries"
+msgstr "Établir des liens vis à vis des librairies partagées"
+
+#: lexsup.c:335
+msgid "Do not link against shared libraries"
+msgstr "Ne pas établir de liens vis à vis des librairies partagées"
+
+#: lexsup.c:343
+msgid "Bind global references locally"
+msgstr "Lier les référence locales globales"
+
+#: lexsup.c:345
+msgid "Check section addresses for overlaps (default)"
+msgstr "Vérifier les adresses de section pour le chevauchement (par défaut)"
+
+#: lexsup.c:348
+msgid "Do not check section addresses for overlaps"
+msgstr "Ne pas vérifier les adresses des sections pour le chevauchement"
+
+#: lexsup.c:351
+msgid "Output cross reference table"
+msgstr "Produire la table des références croisées"
+
+#: lexsup.c:353
+msgid "SYMBOL=EXPRESSION"
+msgstr "SYMBOLE=EXPRESSION"
+
+#: lexsup.c:353
+msgid "Define a symbol"
+msgstr "Définir un symbole"
+
+#: lexsup.c:355
+msgid "[=STYLE]"
+msgstr "[=STYLE]"
+
+#: lexsup.c:355
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Recouvrir les noms des symboles encodés par mutilisation [utilisant le STYLE]"
+
+#: lexsup.c:358
+msgid "Generate embedded relocs"
+msgstr "Générer des relocalisations imbriqués"
+
+#: lexsup.c:360
+msgid "Treat warnings as errors"
+msgstr "Traiter les avertissements comme des erreurs"
+
+#: lexsup.c:363
+msgid "Call SYMBOL at unload-time"
+msgstr "Appeler le SYMBOLE au moment du déchargement"
+
+#: lexsup.c:365
+msgid "Force generation of file with .exe suffix"
+msgstr "Force la génération de fichier avec le suffixe .exe"
+
+#: lexsup.c:367
+msgid "Remove unused sections (on some targets)"
+msgstr "Enlever les sections inutilisées (sur quelques cibles)"
+
+#: lexsup.c:370
+msgid "Don't remove unused sections (default)"
+msgstr "Ne pas enlever les sections inutilisées (par défaut)"
+
+#: lexsup.c:373
+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:376
+msgid "Print option help"
+msgstr "Afficher l'aide-mémoire"
+
+#: lexsup.c:378
+msgid "Call SYMBOL at load-time"
+msgstr "Appeler le SYMBOLE au moment du chargement"
+
+#: lexsup.c:380
+msgid "Write a map file"
+msgstr "Écrire un fichier de projection"
+
+#: lexsup.c:382
+msgid "Do not define Common storage"
+msgstr "Ne pas définir le stockage commun"
+
+#: lexsup.c:384
+msgid "Do not demangle symbol names"
+msgstr "Ne pas recouvrir les noms des symboles encodés par mutilisation"
+
+#: lexsup.c:386
+msgid "Use less memory and more disk I/O"
+msgstr "Utiliser moins de mémoire et plus d'espace disque"
+
+#: lexsup.c:388
+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:391
+msgid "Allow unresolved references in shared libaries"
+msgstr "Permettre les références non résolues dans les librairies partagées"
+
+#: lexsup.c:395
+msgid "Do not allow unresolved references in shared libs"
+msgstr "Ne pas permettre les références non résolues dans les librairies partagés"
+
+#: lexsup.c:399
+msgid "Allow multiple definitions"
+msgstr "Autoriser des définitions multiples"
+
+#: lexsup.c:401
+msgid "Disallow undefined version"
+msgstr "Ne pas permettre de version indéfinie"
+
+#: lexsup.c:403
+msgid "Create default symbol version"
+msgstr "Créer la version de symbole par défaut"
+
+#: lexsup.c:406
+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:409
+msgid "Don't warn about mismatched input files"
+msgstr "Ne pas avertir à propos des non-concordances dans les fichiers d'entrée"
+
+#: lexsup.c:411
+msgid "Turn off --whole-archive"
+msgstr "Désactiver --whole-archive"
+
+#: lexsup.c:413
+msgid "Create an output file even if errors occur"
+msgstr "Créer un fichier de sortie même si des erreurs surviennent"
+
+#: lexsup.c:418
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"Utiliser seuelement les répertoires de librairies spécifiés sur\n"
+"la ligne de commande"
+
+#: lexsup.c:421
+msgid "Specify target of output file"
+msgstr "Spécifier un fichier cible de sortie"
+
+#: lexsup.c:424
+msgid "Ignored for Linux compatibility"
+msgstr "Ignoré pour la compatibilité avec Linux"
+
+#: lexsup.c:427
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Réduire la surcharge en mémoire, en prenant possiblement plus de temps"
+
+#: lexsup.c:430
+msgid "Relax branches on certain targets"
+msgstr "Relâcher les branches de certaines cibles"
+
+#: lexsup.c:433
+msgid "Keep only symbols listed in FILE"
+msgstr "Conserver uniquement les symboles listés dans le FICHIER"
+
+#: lexsup.c:435
+msgid "Set runtime shared library search path"
+msgstr "Initialisé le chemin de recherche des librairies partagées pour l'exécution"
+
+#: lexsup.c:437
+msgid "Set link time shared library search path"
+msgstr "Initialisé le chemin de recherche des librairies partagées pour l'édition de liens"
+
+#: lexsup.c:440
+msgid "Create a shared library"
+msgstr "Créer une librairie partagée"
+
+#: lexsup.c:444
+msgid "Create a position independent executable"
+msgstr "Créer un exécutable à position indépendante"
+
+#: lexsup.c:448
+msgid "Sort common symbols by size"
+msgstr "Trier les symboles communs par taille"
+
+#: lexsup.c:452
+msgid "name|alignment"
+msgstr "nom|alignement"
+
+#: lexsup.c:453
+msgid "Sort sections by name or maximum alignment"
+msgstr "Tries les sections par le nom ou l'alignement maximal"
+
+#: lexsup.c:455
+msgid "COUNT"
+msgstr "DÉCOMPTE"
+
+#: lexsup.c:455
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Combien d'étiquettes réservées dans la section .dynamic"
+
+#: lexsup.c:458
+msgid "[=SIZE]"
+msgstr "[=TAILLE]"
+
+#: lexsup.c:458
+msgid "Split output sections every SIZE octets"
+msgstr "Découper à la sortie les sections à chaque NOMBRE d'octets"
+
+#: lexsup.c:461
+msgid "[=COUNT]"
+msgstr "[=DÉCOMPTE]"
+
+#: lexsup.c:461
+msgid "Split output sections every COUNT relocs"
+msgstr "Découper à la sortie les sections à chaque NOMBRE de relocalisations"
+
+#: lexsup.c:464
+msgid "Print memory usage statistics"
+msgstr "Afficher les statistiques de l'utilisation de la mémoire"
+
+#: lexsup.c:466
+msgid "Display target specific options"
+msgstr "Afficher les options spécifiques cibles"
+
+#: lexsup.c:468
+msgid "Do task level linking"
+msgstr "Composer des liens au niveau de l'exécution de la tache"
+
+#: lexsup.c:470
+msgid "Use same format as native linker"
+msgstr "Utiliser le même format que l'éditeur de lien natif"
+
+#: lexsup.c:472
+msgid "SECTION=ADDRESS"
+msgstr "SECTION=ADRESSE"
+
+#: lexsup.c:472
+msgid "Set address of named section"
+msgstr "Initialisé l'adresse de la section nommé"
+
+#: lexsup.c:475
+msgid "Set address of .bss section"
+msgstr "Initialisé l'adresse de la section .bss"
+
+#: lexsup.c:477
+msgid "Set address of .data section"
+msgstr "Initialisé l'adresse de la section .data"
+
+#: lexsup.c:479
+msgid "Set address of .text section"
+msgstr "Initialisé l'adresse de la section .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 ""
+"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:486
+msgid "Output lots of information during link"
+msgstr "Afficher des tas d'information durant l'édition de lien"
+
+#: lexsup.c:490
+msgid "Read version information script"
+msgstr "Lire le script des informations de version"
+
+#: lexsup.c:493
+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:496
+msgid "Warn about duplicate common symbols"
+msgstr "AVERTIR au sujet des symboles communs dupliqués"
+
+#: lexsup.c:498
+msgid "Warn if global constructors/destructors are seen"
+msgstr "AVERTIR si des constructeurs/destructeurs globaux sont détectés"
+
+#: lexsup.c:501
+msgid "Warn if the multiple GP values are used"
+msgstr "AVERTIR si des valeurs GP multiples sont utilisées"
+
+#: lexsup.c:503
+msgid "Warn only once per undefined symbol"
+msgstr "AVERTIR seulement une fois pour chaque symbole indéfini"
+
+#: lexsup.c:505
+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:508
+msgid "Warn if shared object has DT_TEXTREL"
+msgstr "Avertir si l'objet partagé a DT_TEXTREL"
+
+#: lexsup.c:512
+msgid "Report unresolved symbols as warnings"
+msgstr "Rapporter les symboles non résolus par avertissement"
+
+#: lexsup.c:515
+msgid "Report unresolved symbols as errors"
+msgstr "Rapporter des symboles non résolus comme des errreurs"
+
+#: lexsup.c:517
+msgid "Include all objects from following archives"
+msgstr "Inclure tous les objets des archives suivantes"
+
+#: lexsup.c:520
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Utiliser les fonctions d'emballage pour SYMBOLE"
+
+#: lexsup.c:667
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: option « %s » non reocnnue\n"
+
+#: lexsup.c:669
+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:687
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: -a option non reocnnue « %s »\n"
+
+#: lexsup.c:700
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: -assert option non reconnue « %s »\n"
+
+#: lexsup.c:743
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%P: style inconnu de recouvrement du transcodage par mutilisation « %s »"
+
+#: lexsup.c:805
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: nombre invalide « %s »\n"
+
+#: lexsup.c:897
+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:968
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: option -rpath non reconnue\n"
+
+#: lexsup.c:1080
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: -shared non supporté\n"
+
+#: lexsup.c:1089
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: -pie n'est pas supportée\n"
+
+#: lexsup.c:1099
+msgid "name"
+msgstr "nom"
+
+#: lexsup.c:1101
+msgid "alignment"
+msgstr "alignement"
+
+#: lexsup.c:1104
+msgid "%P%F: invalid section sorting option: %s\n"
+msgstr "%P%F:option de trie de section invalide: %s\n"
+
+#: lexsup.c:1130
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr "%P%F: argument invalide pour l'option \"--section-start\"\n"
+
+#: lexsup.c:1137
+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:1311
+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:1318
+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:1346
+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:1397 lexsup.c:1410
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr "%P%F: nombre hexadécimal invalide « %s »\n"
+
+#: lexsup.c:1445
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr "Usage: %s [options] fichier...\n"
+
+#: lexsup.c:1447
+#, c-format
+msgid "Options:\n"
+msgstr "Options:\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: cibles supportées:"
+
+#: lexsup.c:1538
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: émulations supportées: "
+
+#: lexsup.c:1543
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: options spécifiques d'émulation:\n"
+
+#: lexsup.c:1547
+#, 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:303
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XArchitecture PEI non supportée: %s\n"
+
+#: pe-dll.c:652
+#, 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:659
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "AVERTISSEMENT, duplication EXPORT: %s\n"
+
+#: pe-dll.c:725
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XNe peut exporter %s: symbole indéfini\n"
+
+#: pe-dll.c:731
+#, 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:738
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XNe peut exporter %s: symbole non repéré\n"
+
+#: pe-dll.c:850
+#, 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:1172
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XErreur: %d-bit relocalisation dans dll\n"
+
+#: pe-dll.c:1300
+#, 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:1443
+#, c-format
+msgid "; no contents available\n"
+msgstr "; aucun contenu disponible\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: 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:2235
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr "%XNe peut ouvrir le fichier .lib: %s\n"
+
+#: pe-dll.c:2240
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Création du fichier de librairie: %s\n"
+
+#~ 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 " librairie 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.17/ld/po/ld.pot b/binutils-2.17/ld/po/ld.pot
new file mode 100644
index 00000000..549ecf46
--- /dev/null
+++ b/binutils-2.17/ld/po/ld.pot
@@ -0,0 +1,1916 @@
+# 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: \n"
+"POT-Creation-Date: 2006-03-25 18:36+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:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr ""
+
+#: 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 ""
+
+#: emultempl/armcoff.em:190 emultempl/pe.em:1460
+msgid "%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"
+msgstr ""
+
+#: emultempl/armcoff.em:195 emultempl/pe.em:1465
+msgid "%P: warning: connot find thumb start symbol %s\n"
+msgstr ""
+
+#: emultempl/pe.em:304
+#, c-format
+msgid ""
+" --base_file <basefile> Generate a base file for relocatable "
+"DLLs\n"
+msgstr ""
+
+#: emultempl/pe.em:305
+#, c-format
+msgid ""
+" --dll Set image base to the default for DLLs\n"
+msgstr ""
+
+#: emultempl/pe.em:306
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr ""
+
+#: emultempl/pe.em:307
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr ""
+
+#: emultempl/pe.em:308
+#, c-format
+msgid ""
+" --image-base <address> Set start address of the executable\n"
+msgstr ""
+
+#: emultempl/pe.em:309
+#, c-format
+msgid ""
+" --major-image-version <number> Set version number of the executable\n"
+msgstr ""
+
+#: emultempl/pe.em:310
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr ""
+
+#: emultempl/pe.em:311
+#, c-format
+msgid ""
+" --major-subsystem-version <number> Set minimum required OS subsystem "
+"version\n"
+msgstr ""
+
+#: emultempl/pe.em:312
+#, c-format
+msgid ""
+" --minor-image-version <number> Set revision number of the executable\n"
+msgstr ""
+
+#: emultempl/pe.em:313
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr ""
+
+#: emultempl/pe.em:314
+#, c-format
+msgid ""
+" --minor-subsystem-version <number> Set minimum required OS subsystem "
+"revision\n"
+msgstr ""
+
+#: emultempl/pe.em:315
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr ""
+
+#: emultempl/pe.em:316
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr ""
+
+#: emultempl/pe.em:317
+#, c-format
+msgid ""
+" --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr ""
+
+#: emultempl/pe.em:318
+#, c-format
+msgid ""
+" --support-old-code Support interworking with old code\n"
+msgstr ""
+
+#: emultempl/pe.em:319
+#, c-format
+msgid ""
+" --thumb-entry=<symbol> Set the entry point to be Thumb "
+"<symbol>\n"
+msgstr ""
+
+#: emultempl/pe.em:321
+#, c-format
+msgid ""
+" --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr ""
+
+#: emultempl/pe.em:322
+#, c-format
+msgid " --disable-stdcall-fixup Don't link _sym to _sym@nn\n"
+msgstr ""
+
+#: emultempl/pe.em:323
+#, c-format
+msgid ""
+" --enable-stdcall-fixup Link _sym to _sym@nn without warnings\n"
+msgstr ""
+
+#: emultempl/pe.em:324
+#, c-format
+msgid ""
+" --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr ""
+
+#: emultempl/pe.em:325
+#, c-format
+msgid ""
+" --exclude-libs lib,lib,... Exclude libraries from automatic "
+"export\n"
+msgstr ""
+
+#: emultempl/pe.em:326
+#, c-format
+msgid ""
+" --export-all-symbols Automatically export all globals to "
+"DLL\n"
+msgstr ""
+
+#: emultempl/pe.em:327
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr ""
+
+#: emultempl/pe.em:328
+#, c-format
+msgid " --out-implib <file> Generate import library\n"
+msgstr ""
+
+#: emultempl/pe.em:329
+#, c-format
+msgid ""
+" --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr ""
+
+#: emultempl/pe.em:330
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr ""
+
+#: emultempl/pe.em:331
+#, c-format
+msgid ""
+" --compat-implib Create backward compatible import "
+"libs;\n"
+" create __imp_<SYMBOL> as well.\n"
+msgstr ""
+
+#: emultempl/pe.em:333
+#, c-format
+msgid ""
+" --enable-auto-image-base Automatically choose image base for "
+"DLLs\n"
+" unless user specifies one\n"
+msgstr ""
+
+#: emultempl/pe.em:335
+#, c-format
+msgid ""
+" --disable-auto-image-base Do not auto-choose image base. "
+"(default)\n"
+msgstr ""
+
+#: 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 ""
+
+#: emultempl/pe.em:339
+#, c-format
+msgid ""
+" --enable-auto-import Do sophistcated linking of _sym to\n"
+" __imp_sym for DATA references\n"
+msgstr ""
+
+#: emultempl/pe.em:341
+#, c-format
+msgid ""
+" --disable-auto-import Do not auto-import DATA items from "
+"DLLs\n"
+msgstr ""
+
+#: 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 ""
+
+#: emultempl/pe.em:345
+#, c-format
+msgid ""
+" --disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations "
+"for\n"
+" auto-imported DATA.\n"
+msgstr ""
+
+#: 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 ""
+
+#: emultempl/pe.em:350
+#, c-format
+msgid ""
+" --large-address-aware Executable supports virtual addresses\n"
+" greater than 2 gigabytes\n"
+msgstr ""
+
+#: emultempl/pe.em:417
+msgid "%P: warning: bad version number in -subsystem option\n"
+msgstr ""
+
+#: emultempl/pe.em:448
+msgid "%P%F: invalid subsystem type %s\n"
+msgstr ""
+
+#: emultempl/pe.em:487
+msgid "%P%F: invalid hex number for PE parameter '%s'\n"
+msgstr ""
+
+#: emultempl/pe.em:504
+msgid "%P%F: strange hex info for PE parameter '%s'\n"
+msgstr ""
+
+#: emultempl/pe.em:521
+#, c-format
+msgid "%s: Can't open base file %s\n"
+msgstr ""
+
+#: emultempl/pe.em:737
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr ""
+
+#: emultempl/pe.em:824 emultempl/pe.em:851
+#, c-format
+msgid "Warning: resolving %s by linking to %s\n"
+msgstr ""
+
+#: emultempl/pe.em:829 emultempl/pe.em:856
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr ""
+
+#: emultempl/pe.em:830 emultempl/pe.em:857
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr ""
+
+#: emultempl/pe.em:876
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr ""
+
+#: emultempl/pe.em:913
+#, c-format
+msgid "Info: resolving %s by linking to %s (auto-import)\n"
+msgstr ""
+
+#: emultempl/pe.em:986
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr ""
+
+#: emultempl/pe.em:1261
+#, c-format
+msgid "Errors encountered processing file %s\n"
+msgstr ""
+
+#: emultempl/pe.em:1284
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr ""
+
+#: 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 ""
+
+#: ldcref.c:154
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr ""
+
+#: ldcref.c:160
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr ""
+
+#: ldcref.c:226
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+
+#: ldcref.c:227
+msgid "Symbol"
+msgstr ""
+
+#: ldcref.c:235
+#, c-format
+msgid "File\n"
+msgstr ""
+
+#: ldcref.c:239
+#, c-format
+msgid "No symbols\n"
+msgstr ""
+
+#: ldcref.c:360 ldcref.c:482
+msgid "%B%F: could not read symbols; %E\n"
+msgstr ""
+
+#: ldcref.c:364 ldcref.c:486 ldmain.c:1232 ldmain.c:1236
+msgid "%B%F: could not read symbols: %E\n"
+msgstr ""
+
+#: ldcref.c:415
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr ""
+
+#: ldcref.c:557 ldcref.c:564 ldmain.c:1279 ldmain.c:1286
+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:591
+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
+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:236
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr ""
+
+#: ldemul.c:242
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr ""
+
+#: ldemul.c:262
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr ""
+
+#: ldemul.c:263
+msgid "Supported emulations: "
+msgstr ""
+
+#: ldemul.c:305
+#, c-format
+msgid " no emulation specific options.\n"
+msgstr ""
+
+#: ldexp.c:338
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr ""
+
+#: ldexp.c:346
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr ""
+
+#: ldexp.c:536
+#, c-format
+msgid "%X%S: unresolvable symbol `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:547
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:608 ldexp.c:621
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr ""
+
+#: ldexp.c:683
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr ""
+
+#: ldexp.c:697
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr ""
+
+#: ldexp.c:700
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr ""
+
+#: ldexp.c:709
+msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
+msgstr ""
+
+#: ldexp.c:748
+msgid "%P%F:%s: hash creation failed\n"
+msgstr ""
+
+#: ldexp.c:1000 ldexp.c:1025
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr ""
+
+#: ldexp.c:1082
+#, 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 ""
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr ""
+
+#: ldfile.c:147
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr ""
+
+#: ldfile.c:255 ldfile.c:282
+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 ""
+
+#: ldfile.c:387
+msgid "%F%P: %s: No such file: %E\n"
+msgstr ""
+
+#: ldfile.c:417
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr ""
+
+#: ldfile.c:420
+msgid "%F%P: cannot find %s\n"
+msgstr ""
+
+#: ldfile.c:437 ldfile.c:453
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr ""
+
+#: ldfile.c:439 ldfile.c:455
+#, c-format
+msgid "opened script file %s\n"
+msgstr ""
+
+#: ldfile.c:499
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr ""
+
+#: ldfile.c:546
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr ""
+
+#: ldlang.c:940 ldlang.c:982 ldlang.c:2695
+msgid "%P%F: can not create hash table: %E\n"
+msgstr ""
+
+#: ldlang.c:1025
+msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
+msgstr ""
+
+#: ldlang.c:1031
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr ""
+
+#: ldlang.c:1108 ldlang.c:1135
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr ""
+
+#: ldlang.c:1601
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+
+#: 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 ""
+
+#: ldlang.c:1709
+msgid "%P%F: Illegal use of `%s' section\n"
+msgstr ""
+
+#: ldlang.c:1716
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr ""
+
+#: ldlang.c:2313
+msgid "%B: file not recognized: %E\n"
+msgstr ""
+
+#: ldlang.c:2314
+msgid "%B: matching formats:"
+msgstr ""
+
+#: ldlang.c:2321
+msgid "%F%B: file not recognized: %E\n"
+msgstr ""
+
+#: ldlang.c:2385
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr ""
+
+#: ldlang.c:2396 ldlang.c:2410
+msgid "%F%B: could not read symbols: %E\n"
+msgstr ""
+
+#: ldlang.c:2665
+msgid ""
+"%P: warning: could not find any targets that match endianness requirement\n"
+msgstr ""
+
+#: ldlang.c:2679
+msgid "%P%F: target %s not found\n"
+msgstr ""
+
+#: ldlang.c:2681
+msgid "%P%F: cannot open output file %s: %E\n"
+msgstr ""
+
+#: ldlang.c:2687
+msgid "%P%F:%s: can not make object file: %E\n"
+msgstr ""
+
+#: ldlang.c:2691
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr ""
+
+#: ldlang.c:2839
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr ""
+
+#: ldlang.c:2857
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr ""
+
+#: ldlang.c:3288
+msgid " load address 0x%V"
+msgstr ""
+
+#: ldlang.c:3528
+msgid "%W (size before relaxing)\n"
+msgstr ""
+
+#: ldlang.c:3615
+#, c-format
+msgid "Address of section %s set to "
+msgstr ""
+
+#: ldlang.c:3768
+#, c-format
+msgid "Fail with %d\n"
+msgstr ""
+
+#: ldlang.c:4040
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr ""
+
+#: ldlang.c:4065
+msgid "%X%P: address 0x%v of %B section %s is not within region %s\n"
+msgstr ""
+
+#: ldlang.c:4074
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr ""
+
+#: ldlang.c:4114
+#, c-format
+msgid ""
+"%F%S: non constant or forward reference address expression for section %s\n"
+msgstr ""
+
+#: ldlang.c:4139
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr ""
+
+#: ldlang.c:4197
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr ""
+
+#: ldlang.c:4202
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr ""
+
+#: ldlang.c:4224
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr ""
+
+#: ldlang.c:4388
+msgid "%P%F: can't relax section: %E\n"
+msgstr ""
+
+#: ldlang.c:4636
+msgid "%F%P: invalid data statement\n"
+msgstr ""
+
+#: ldlang.c:4669
+msgid "%F%P: invalid reloc statement\n"
+msgstr ""
+
+#: ldlang.c:4802
+msgid "%P%F:%s: can't set start address\n"
+msgstr ""
+
+#: ldlang.c:4815 ldlang.c:4834
+msgid "%P%F: can't set start address\n"
+msgstr ""
+
+#: ldlang.c:4827
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr ""
+
+#: ldlang.c:4839
+msgid "%P: warning: cannot find entry symbol %s; not setting start address\n"
+msgstr ""
+
+#: ldlang.c:4888
+msgid ""
+"%P%F: Relocatable linking with relocations from format %s (%B) to format %s "
+"(%B) is not supported\n"
+msgstr ""
+
+#: ldlang.c:4898
+msgid ""
+"%P: warning: %s architecture of input file `%B' is incompatible with %s "
+"output\n"
+msgstr ""
+
+#: ldlang.c:4920
+msgid "%P%X: failed to merge target specific data of file %B\n"
+msgstr ""
+
+#: ldlang.c:5004
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+
+#: ldlang.c:5005
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+
+#: ldlang.c:5131
+msgid "%P%F: invalid syntax in flags\n"
+msgstr ""
+
+#: ldlang.c:5406
+msgid "%P%F: Failed to create hash table\n"
+msgstr ""
+
+#: ldlang.c:5722
+msgid "%P%F: multiple STARTUP files\n"
+msgstr ""
+
+#: ldlang.c:5770
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr ""
+
+#: ldlang.c:6007
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr ""
+
+#: ldlang.c:6027
+msgid "%X%P: section `%s' assigned to non-existent phdr `%s'\n"
+msgstr ""
+
+#: ldlang.c:6418
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr ""
+
+#: ldlang.c:6560
+msgid ""
+"%X%P: anonymous version tag cannot be combined with other version tags\n"
+msgstr ""
+
+#: ldlang.c:6569
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr ""
+
+#: ldlang.c:6589 ldlang.c:6598 ldlang.c:6615 ldlang.c:6625
+msgid "%X%P: duplicate expression `%s' in version information\n"
+msgstr ""
+
+#: ldlang.c:6665
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr ""
+
+#: ldlang.c:6687
+msgid "%X%P: unable to read .exports section contents\n"
+msgstr ""
+
+#: ldmain.c:232
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr ""
+
+#: ldmain.c:345
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr ""
+
+#: ldmain.c:347
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr ""
+
+#: ldmain.c:353
+msgid "%P%F: -F may not be used without -shared\n"
+msgstr ""
+
+#: ldmain.c:355
+msgid "%P%F: -f may not be used without -shared\n"
+msgstr ""
+
+#: 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 ""
+
+#: ldmain.c:437
+msgid "%P: mode %s\n"
+msgstr ""
+
+#: ldmain.c:453
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr ""
+
+#: ldmain.c:485
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr ""
+
+#: ldmain.c:494
+msgid "%F%B: final close failed: %E\n"
+msgstr ""
+
+#: ldmain.c:520
+msgid "%X%P: unable to open for source of copy `%s'\n"
+msgstr ""
+
+#: ldmain.c:523
+msgid "%X%P: unable to open for destination of copy `%s'\n"
+msgstr ""
+
+#: ldmain.c:530
+msgid "%P: Error writing file `%s'\n"
+msgstr ""
+
+#: ldmain.c:535 pe-dll.c:1494
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr ""
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr ""
+
+#: ldmain.c:554
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr ""
+
+#: ldmain.c:637
+msgid "%P%F: missing argument to -m\n"
+msgstr ""
+
+#: ldmain.c:784 ldmain.c:803 ldmain.c:834
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr ""
+
+#: ldmain.c:788 ldmain.c:807
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr ""
+
+#: ldmain.c:821
+msgid "%X%P: error: duplicate retain-symbols-file\n"
+msgstr ""
+
+#: ldmain.c:864
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr ""
+
+#: ldmain.c:869
+msgid "%P: `-retain-symbols-file' overrides `-s' and `-S'\n"
+msgstr ""
+
+#: ldmain.c:944
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+
+#: ldmain.c:1014
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr ""
+
+#: ldmain.c:1017
+msgid "%D: first defined here\n"
+msgstr ""
+
+#: ldmain.c:1021
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr ""
+
+#: ldmain.c:1051
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr ""
+
+#: ldmain.c:1054
+msgid "%B: warning: common is here\n"
+msgstr ""
+
+#: ldmain.c:1061
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr ""
+
+#: ldmain.c:1064
+msgid "%B: warning: defined here\n"
+msgstr ""
+
+#: ldmain.c:1071
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr ""
+
+#: ldmain.c:1074
+msgid "%B: warning: larger common is here\n"
+msgstr ""
+
+#: ldmain.c:1078
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr ""
+
+#: ldmain.c:1081
+msgid "%B: warning: smaller common is here\n"
+msgstr ""
+
+#: ldmain.c:1085
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr ""
+
+#: ldmain.c:1087
+msgid "%B: warning: previous common is here\n"
+msgstr ""
+
+#: ldmain.c:1107 ldmain.c:1145
+msgid "%P: warning: global constructor %s used\n"
+msgstr ""
+
+#: ldmain.c:1155
+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: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 ""
+
+#: ldmain.c:1341
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr ""
+
+#: ldmain.c:1362
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1365
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1371
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1374
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1385
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1388
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr ""
+
+#: ldmain.c:1394
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1397
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr ""
+
+#: ldmain.c:1436
+msgid " additional relocation overflows omitted from the output\n"
+msgstr ""
+
+#: ldmain.c:1449
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr ""
+
+#: ldmain.c:1454
+msgid ""
+" relocation truncated to fit: %s against symbol `%T' defined in %A section "
+"in %B"
+msgstr ""
+
+#: ldmain.c:1466
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr ""
+
+#: ldmain.c:1483
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr ""
+
+#: ldmain.c:1498
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr ""
+
+#: ldmisc.c:147
+#, c-format
+msgid "no symbol"
+msgstr ""
+
+#: ldmisc.c:238
+#, c-format
+msgid "built in linker script:%u"
+msgstr ""
+
+#: ldmisc.c:294 ldmisc.c:298
+msgid "%B%F: could not read symbols\n"
+msgstr ""
+
+#: ldmisc.c:340
+msgid "%B: In function `%T'"
+msgstr ""
+
+#: ldmisc.c:510
+msgid "%F%P: internal error %s %d\n"
+msgstr ""
+
+#: ldmisc.c:556
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr ""
+
+#: ldmisc.c:559
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr ""
+
+#: ldmisc.c:561
+msgid "%P%F: please report this bug\n"
+msgstr ""
+
+#. Output for noisy == 2 is intended to follow the GNU standards.
+#: ldver.c:38
+#, c-format
+msgid "GNU ld version %s\n"
+msgstr ""
+
+#: ldver.c:42
+#, c-format
+msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgstr ""
+
+#: 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 ""
+
+#: ldver.c:52
+#, c-format
+msgid " Supported emulations:\n"
+msgstr ""
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr ""
+
+#: ldwrite.c:344
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr ""
+
+#: ldwrite.c:356
+msgid "%F%P: clone section failed: %E\n"
+msgstr ""
+
+#: ldwrite.c:394
+#, c-format
+msgid "%8x something else\n"
+msgstr ""
+
+#: ldwrite.c:564
+msgid "%F%P: final link failed: %E\n"
+msgstr ""
+
+#: lexsup.c:196 lexsup.c:328
+msgid "KEYWORD"
+msgstr ""
+
+#: lexsup.c:196
+msgid "Shared library control for HP/UX compatibility"
+msgstr ""
+
+#: lexsup.c:199
+msgid "ARCH"
+msgstr ""
+
+#: lexsup.c:199
+msgid "Set architecture"
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: lexsup.c:261
+msgid "Generate relocatable output"
+msgstr ""
+
+#: lexsup.c:265
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: lexsup.c:319
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+
+#: lexsup.c:322
+msgid "Only set DT_NEEDED for following dynamic libs if used"
+msgstr ""
+
+#: lexsup.c:325
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr ""
+
+#: lexsup.c:328
+msgid "Ignored for SunOS compatibility"
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: lexsup.c:422
+msgid "Specify target of output file"
+msgstr ""
+
+#: lexsup.c:425
+msgid "Ignored for Linux compatibility"
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: lexsup.c:478
+msgid "Set address of .data section"
+msgstr ""
+
+#: lexsup.c:480
+msgid "Set address of .text section"
+msgstr ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: lexsup.c:670
+msgid "%P%F: use the --help option for usage information\n"
+msgstr ""
+
+#: lexsup.c:688
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr ""
+
+#: lexsup.c:701
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr ""
+
+#: lexsup.c:744
+msgid "%F%P: unknown demangling style `%s'"
+msgstr ""
+
+#: lexsup.c:806
+msgid "%P%F: invalid number `%s'\n"
+msgstr ""
+
+#: lexsup.c:898
+msgid "%P%F: bad --unresolved-symbols option: %s\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:969
+msgid "%P%F: bad -rpath option\n"
+msgstr ""
+
+#: lexsup.c:1081
+msgid "%P%F: -shared not supported\n"
+msgstr ""
+
+#: lexsup.c:1090
+msgid "%P%F: -pie not supported\n"
+msgstr ""
+
+#: 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 ""
+
+#: lexsup.c:1131
+msgid "%P%F: invalid argument to option \"--section-start\"\n"
+msgstr ""
+
+#: lexsup.c:1138
+msgid "%P%F: missing argument(s) to option \"--section-start\"\n"
+msgstr ""
+
+#: lexsup.c:1312
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr ""
+
+#: lexsup.c:1319
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr ""
+
+#: lexsup.c:1347
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr ""
+
+#: lexsup.c:1398 lexsup.c:1411
+msgid "%P%F: invalid hex number `%s'\n"
+msgstr ""
+
+#: lexsup.c:1447
+#, c-format
+msgid "Usage: %s [options] file...\n"
+msgstr ""
+
+#: lexsup.c:1449
+#, c-format
+msgid "Options:\n"
+msgstr ""
+
+#: lexsup.c:1527
+#, c-format
+msgid " @FILE"
+msgstr ""
+
+#: lexsup.c:1530
+#, 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:1535
+#, c-format
+msgid "%s: supported targets:"
+msgstr ""
+
+#: lexsup.c:1543
+#, c-format
+msgid "%s: supported emulations: "
+msgstr ""
+
+#: lexsup.c:1548
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr ""
+
+#: lexsup.c:1552
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr ""
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr ""
+
+#: pe-dll.c:303
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr ""
+
+#: pe-dll.c:604
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr ""
+
+#: pe-dll.c:657
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr ""
+
+#: pe-dll.c:664
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr ""
+
+#: pe-dll.c:751
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr ""
+
+#: pe-dll.c:757
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr ""
+
+#: pe-dll.c:764
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr ""
+
+#: pe-dll.c:877
+#, c-format
+msgid "%XError, ordinal used twice: %d (%s vs %s)\n"
+msgstr ""
+
+#: pe-dll.c:1219
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr ""
+
+#: pe-dll.c:1347
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr ""
+
+#: pe-dll.c:1490
+#, c-format
+msgid "; no contents available\n"
+msgstr ""
+
+#: 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 ""
+
+#: pe-dll.c:2282
+#, c-format
+msgid "%XCan't open .lib file: %s\n"
+msgstr ""
+
+#: pe-dll.c:2287
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr ""
diff --git a/binutils-2.17/ld/po/sv.gmo b/binutils-2.17/ld/po/sv.gmo
new file mode 100644
index 00000000..f7038a8a
--- /dev/null
+++ b/binutils-2.17/ld/po/sv.gmo
Binary files differ
diff --git a/binutils-2.17/ld/po/sv.po b/binutils-2.17/ld/po/sv.po
new file mode 100644
index 00000000..4c17a255
--- /dev/null
+++ b/binutils-2.17/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.17/ld/po/tr.gmo b/binutils-2.17/ld/po/tr.gmo
new file mode 100644
index 00000000..96d567be
--- /dev/null
+++ b/binutils-2.17/ld/po/tr.gmo
Binary files differ
diff --git a/binutils-2.17/ld/po/tr.po b/binutils-2.17/ld/po/tr.po
new file mode 100644
index 00000000..edeb684d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/po/vi.gmo b/binutils-2.17/ld/po/vi.gmo
new file mode 100644
index 00000000..da94aee4
--- /dev/null
+++ b/binutils-2.17/ld/po/vi.gmo
Binary files differ
diff --git a/binutils-2.17/ld/po/vi.po b/binutils-2.17/ld/po/vi.po
new file mode 100644
index 00000000..08d08b8f
--- /dev/null
+++ b/binutils-2.17/ld/po/vi.po
@@ -0,0 +1,1958 @@
+# Vietnamese translation for LD.
+# Copyright © 2006 Free Software Foundation, Inc.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-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-05-23 21:31+0930\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <gnomevi-list@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"
+"X-Generator: LocFactoryEditor 1.6b34\n"
+
+#: emultempl/armcoff.em:72
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code _Hỗ trợ_ dệt vào với _mã cũ_\n"
+
+#: emultempl/armcoff.em:73
+#, c-format
+msgid " --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"
+msgstr " --thumb-entry=<ký_hiệu> Lập Ä‘iểm _vào_ là ký hiệu _Hình Nhá»_Thumb này\n"
+
+#: emultempl/armcoff.em:121
+#, 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:1460
+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:1465
+msgid "%P: warning: connot 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:304
+#, c-format
+msgid " --base_file <basefile> Generate a base file for relocatable DLLs\n"
+msgstr ""
+" --base_file <tập_tinbasefile>\n"
+"\tTạo ra một _tập tin cơ bản_ cho các DLL có khả năng định vị lại\n"
+
+#: emultempl/pe.em:305
+#, c-format
+msgid " --dll Set image base to the default for DLLs\n"
+msgstr " --dll Lập cơ bản ảnh là mặc định cho các DLL\n"
+
+#: emultempl/pe.em:306
+#, c-format
+msgid " --file-alignment <size> Set file alignment\n"
+msgstr " --file-alignment <kích_cỡ> Lập cách _canh lỠtập tin_\n"
+
+#: emultempl/pe.em:307
+#, c-format
+msgid " --heap <size> Set initial size of the heap\n"
+msgstr " --heap <kích_cỡ> Lập kích cỡ _miá»n nhá»›_ ban đầu\n"
+
+#: emultempl/pe.em:308
+#, c-format
+msgid " --image-base <address> Set start address of the executable\n"
+msgstr ""
+" --image-base <địa_chỉ> Lập địa chỉ bắt đầu của ứng dụng chạy được\n"
+"\t\t\t\t\t\t\t\t (_cơ bản ảnh_)\n"
+
+#: emultempl/pe.em:309
+#, c-format
+msgid " --major-image-version <number> Set version number of the executable\n"
+msgstr ""
+" --major-image-version <số> \tLập số thứ tự _phiên bản_\n"
+"\t\t\t\t\tcủa ứng dụng chạy được (_ảnh lớn_)\n"
+
+#: emultempl/pe.em:310
+#, c-format
+msgid " --major-os-version <number> Set minimum required OS version\n"
+msgstr ""
+" --major-os-version <số> \t\tLập số thứ tự _phiên bản\n"
+"\t\t\t\thệ Ä‘iá»u hành_ tối thiểu cần thiết (_lá»›n_)\n"
+
+#: emultempl/pe.em:311
+#, c-format
+msgid " --major-subsystem-version <number> Set minimum required OS subsystem version\n"
+msgstr ""
+" --major-subsystem-version <số> \t Lập số thứ tự _phiên bản\n"
+"\t\t\t\thệ Ä‘iá»u hành con_ tối thiểu cần thiết (_lá»›n_)\n"
+
+#: emultempl/pe.em:312
+#, c-format
+msgid " --minor-image-version <number> Set revision number of the executable\n"
+msgstr ""
+" --minor-image-version <số> \tLập số thứ tự bản sửa đổi\n"
+"\tcủa ứng dụng chạy được (_phiên bản ảnh nhá»_)\n"
+
+#: emultempl/pe.em:313
+#, c-format
+msgid " --minor-os-version <number> Set minimum required OS revision\n"
+msgstr ""
+" --minor-os-version <số> \t\tLập số thứ tự bản sửa đổi\n"
+"\t\tcủa hệ Ä‘iá»u hành cần thiết (_phiên bản hệ Ä‘iá»u hành nhá»_)\n"
+
+#: emultempl/pe.em:314
+#, c-format
+msgid " --minor-subsystem-version <number> Set minimum required OS subsystem revision\n"
+msgstr ""
+" --minor-subsystem-version <số> \t Lập số thứ tự bản sửa đổi\n"
+"\t\tcủa hệ Ä‘iá»u hành con cần thiết (_phiên bản hệ Ä‘iá»u hành con nhá»_)\n"
+
+#: emultempl/pe.em:315
+#, c-format
+msgid " --section-alignment <size> Set section alignment\n"
+msgstr " --section-alignment <kích_cỡ> Lập cách _canh lỠphần_\n"
+
+#: emultempl/pe.em:316
+#, c-format
+msgid " --stack <size> Set size of the initial stack\n"
+msgstr " --stack <kích_cỡ> Lập kích cỡ của _đống_ ban đầu\n"
+
+#: emultempl/pe.em:317
+#, c-format
+msgid " --subsystem <name>[:<version>] Set required OS subsystem [& version]\n"
+msgstr " --subsystem <tên>[:<phiên_bản>] Lập _hệ Ä‘iá»u hành con_ [và phiên bản] cần thiết\n"
+
+#: emultempl/pe.em:318
+#, c-format
+msgid " --support-old-code Support interworking with old code\n"
+msgstr " --support-old-code _Hỗ trợ_ dệt vào với _mã cũ_\n"
+
+#: emultempl/pe.em:319
+#, c-format
+msgid " --thumb-entry=<symbol> Set the entry point to be Thumb <symbol>\n"
+msgstr " --thumb-entry=<ký_hiệu> Lập điểm _vào_ là ký hiệu _Thumb_ này\n"
+
+#: emultempl/pe.em:321
+#, c-format
+msgid " --add-stdcall-alias Export symbols with and without @nn\n"
+msgstr " --add-stdcall-alias Xuất ký hiệu vá»›i và không vá»›i « @nn » (_thêm bí danh gá»i chuẩn_)\n"
+
+#: emultempl/pe.em:322
+#, 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 » (_tắt sá»­a gá»i chuẩn_)\n"
+
+#: emultempl/pe.em:323
+#, 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 », không có cảnh báo\n"
+" \t\t\t\t\t\t\t(_bật sá»­a gá»i chuẩn_)\n"
+
+#: emultempl/pe.em:324
+#, c-format
+msgid " --exclude-symbols sym,sym,... Exclude symbols from automatic export\n"
+msgstr " --exclude-symbols ký_hiệu,ký_hiệu,... _Loại trừ những ký hiệu_ này ra việc xuất tự động\n"
+
+#: emultempl/pe.em:325
+#, c-format
+msgid " --exclude-libs lib,lib,... Exclude libraries from automatic export\n"
+msgstr " --exclude-libs thư_viên,thư_viên,... _Loại trừ những thư viên_ này ra việc xuất tự động\n"
+
+#: emultempl/pe.em:326
+#, 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 vào DLL (_ký hiệu_)\n"
+
+#: emultempl/pe.em:327
+#, c-format
+msgid " --kill-at Remove @nn from exported symbols\n"
+msgstr " --kill-at Gỡ bỠ« @nn » ra những ký hiệu đã xuất (_buộc kết thức tại_)\n"
+
+#: emultempl/pe.em:328
+#, 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:329
+#, c-format
+msgid " --output-def <file> Generate a .DEF file for the built DLL\n"
+msgstr " --output-def <tập_tin> Tạo _ra_ một tập tin .DEF cho DLL đã xây dụng\n"
+
+#: emultempl/pe.em:330
+#, c-format
+msgid " --warn-duplicate-exports Warn about duplicate exports.\n"
+msgstr " --warn-duplicate-exports _Cảnh báo_ vỠ_việc xuất trùng_ nào.\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 Tạo các _thư viên nhập tương thích_ ngược;\n"
+"\t\t\t\t\tcÅ©ng tạo « __imp_<KÃ_HIỆU> ».\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 Tá»± Ä‘á»™ng chá»n cÆ¡ bản ảnh cho má»i DLL\n"
+"\t\t\t\t\t\t\ttrừ khi ngÆ°á»i dùng gõ nó\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 Äừng _tá»± Ä‘á»™ng_ chá»n _cÆ¡ bản ảnh_ (mặc định) (_tắt_)\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=<chuỗi> Khi liên kết động đến DLL không có thư viên nhập,\n"
+"\thãy dùng « <chuỗi><tên_cơ_bản>.dll » hơn « <tên_cơ_bản>.dll »\n"
+"\t(_tiá»n_tố_tìm_kiếm_)\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 Liên kết một cách tinh tế\n"
+"\t« _sym » đến « __imp_sym » cho các tham chiếu DATA (dữ liệu)\n"
+"\t(_bật nhập tự động)\n"
+
+#: emultempl/pe.em:341
+#, 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 (_tắt_)\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 Chỉnh sửa các hạn chế nhập tự động,\n"
+"\tbằng cách thêm các việc _định vị lại giả_ được tháo gỡ vào _lúc chạy_. (_bật_)\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 Äừng thêm việc _định vị lại giả_\n"
+"\tvào _lúc chạy_ cho DATA (dữ liệu) được nhập tự động. (_tắt_)\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 _Bật_ xuất dữ liệu _gỡ lỗi_ chi tiết\n"
+"\ttrong khi xây dụng hay liên kết đến DLL nào (nhất là việc tự động nhập) (_thêm_)\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 Ứng dụng chạy có hỗ trợ _địa chỉ_ ảo _lớn_ hơn 2 GB\n"
+"\t\t\t\t\t\t\t(_kiến thức_)\n"
+
+#: emultempl/pe.em:417
+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:448
+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:487
+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ố « %s »\n"
+
+#: emultempl/pe.em:504
+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:521
+#, 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:737
+msgid "%P: warning, file alignment > section alignment.\n"
+msgstr "%P: cảnh báo, canh lỠtập tin > canh lỠphần.\n"
+
+#: emultempl/pe.em:824 emultempl/pe.em:851
+#, 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:829 emultempl/pe.em:856
+msgid "Use --enable-stdcall-fixup to disable these warnings\n"
+msgstr "Hãy dùng « --enable-stdcall-fixup » (bật sá»­a gá»i chuẩn) để tắt các cảnh báo này\n"
+
+#: emultempl/pe.em:830 emultempl/pe.em:857
+msgid "Use --disable-stdcall-fixup to disable these fixups\n"
+msgstr "Hãy dùng « --disable-stdcall-fixup » (tắt sá»­a gá»i chuẩn) để tắt các việc sá»­a này\n"
+
+#: emultempl/pe.em:876
+#, c-format
+msgid "%C: Cannot get section contents - auto-import exception\n"
+msgstr "%C: Không thể lấy nội dung phần: ngoài lệ nhập tự động\n"
+
+#: emultempl/pe.em:913
+#, 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)\n"
+
+#: emultempl/pe.em:986
+msgid "%F%P: PE operations on non PE file.\n"
+msgstr "%F%P: thao tác PE với tập tin không phải PE.\n"
+
+#: emultempl/pe.em:1261
+#, 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:1284
+#, c-format
+msgid "Errors encountered processing file %s for interworking"
+msgstr "Gặp lỗi trong khi xử lý tập tin %s để dệt vào với nhau"
+
+#: 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 » (bfd liên kết băm tra cứu) thất bại: %E\n"
+
+#: ldcref.c:154
+msgid "%X%P: bfd_hash_table_init of cref table failed: %E\n"
+msgstr "%X%P: « bfd_hash_table_init » (bfd băm bảng khởi động) với bảng cref thất bại: %E\n"
+
+#: ldcref.c:160
+msgid "%X%P: cref_hash_lookup failed: %E\n"
+msgstr "%X%P: việc « cref_hash_lookup » bị lỗi: %E\n"
+
+#: ldcref.c:226
+#, c-format
+msgid ""
+"\n"
+"Cross Reference Table\n"
+"\n"
+msgstr ""
+"\n"
+"Bảng Tham Chiếu Chéo\n"
+"\n"
+
+#: ldcref.c:227
+msgid "Symbol"
+msgstr "Ký hiệu"
+
+#: ldcref.c:235
+#, c-format
+msgid "File\n"
+msgstr "Tập tin\n"
+
+#: ldcref.c:239
+#, c-format
+msgid "No symbols\n"
+msgstr "Không có ký hiệu\n"
+
+#: ldcref.c:360 ldcref.c:482
+msgid "%B%F: could not read symbols; %E\n"
+msgstr "%B%F: không thể Ä‘á»c các ký hiệu ; %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: không thể Ä‘á»c các ký hiệu : %E\n"
+
+#: ldcref.c:415
+msgid "%P: symbol `%T' missing from main hash table\n"
+msgstr "%P: thiếu ký hiệu « %T » trong bảng băm chính\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: không thể Ä‘á»c các Ä‘iá»u đị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:591
+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:84
+msgid "%P%X: Different relocs used in set %s\n"
+msgstr "%P%X: Sử dụng sự định vị lại khác nhau trong tập hợp %s\n"
+
+#: ldctor.c:102
+msgid "%P%X: Different object file formats composing set %s\n"
+msgstr "%P%X: Có gồm khuôn dạng tập tin đối tượng khác nhau trong %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ợ đị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: Không hỗ trợ kích cỡ %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:236
+#, c-format
+msgid "%S SYSLIB ignored\n"
+msgstr "%S SYSLIB bị bỠqua\n"
+
+#: ldemul.c:242
+#, c-format
+msgid "%S HLL ignored\n"
+msgstr "%S HLL bị bỠqua\n"
+
+#: ldemul.c:262
+msgid "%P: unrecognised emulation mode: %s\n"
+msgstr "%P: không nhận ra chế Ä‘á»™ mô phá»ng: %s\n"
+
+#: ldemul.c:263
+msgid "Supported emulations: "
+msgstr "Mô phá»ng đã há»— trợ : "
+
+#: ldemul.c:305
+#, 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:338
+#, c-format
+msgid "%F%S %% by zero\n"
+msgstr "%F%S %% cho số không\n"
+
+#: ldexp.c:346
+#, c-format
+msgid "%F%S / by zero\n"
+msgstr "%F%S / cho số không\n"
+
+#: ldexp.c:536
+#, 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:547
+#, c-format
+msgid "%F%S: undefined symbol `%s' referenced in expression\n"
+msgstr "%F%S: ký hiệu chưa định nghĩa « %s » được tham chiếu trong biểu thức\n"
+
+#: ldexp.c:608 ldexp.c:621
+#, c-format
+msgid "%F%S: undefined MEMORY region `%s' referenced in expression\n"
+msgstr "%F%S: miá»n MEMORY (nhá»›) chÆ°a định nghÄ©a « %s » được tham chiếu trong biểu thức\n"
+
+#: ldexp.c:683
+#, c-format
+msgid "%F%S can not PROVIDE assignment to location counter\n"
+msgstr "%F%S không thể PROVIDE (cung cấp) việc gán cho bộ đếm địa điểm\n"
+
+#: ldexp.c:697
+#, c-format
+msgid "%F%S invalid assignment to location counter\n"
+msgstr "%F%S việc gán không hợp lệ cho bộ đếm địa điểm\n"
+
+#: ldexp.c:700
+#, c-format
+msgid "%F%S assignment to location counter invalid outside of SECTION\n"
+msgstr "%F%S việc 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:709
+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:748
+msgid "%P%F:%s: hash creation failed\n"
+msgstr "%P%F:%s: việc tạo băm bị lỗi\n"
+
+#: ldexp.c:1000 ldexp.c:1025
+#, c-format
+msgid "%F%S nonconstant expression for %s\n"
+msgstr "%F%S biểu thức thay đổi cho %s\n"
+
+#: ldexp.c:1082
+#, c-format
+msgid "%F%S non constant expression for %s\n"
+msgstr "%F%S biểu thức thay đổi cho %s\n"
+
+#: ldfile.c:139
+#, c-format
+msgid "attempt to open %s failed\n"
+msgstr "việc cố mở %s bị lỗi\n"
+
+#: ldfile.c:141
+#, c-format
+msgid "attempt to open %s succeeded\n"
+msgstr "việc cố mở %s đã thành công\n"
+
+#: ldfile.c:147
+msgid "%F%P: invalid BFD target `%s'\n"
+msgstr "%F%P: đích BFD không hợp lệ « %s »\n"
+
+#: ldfile.c:255 ldfile.c:282
+msgid "%P: skipping incompatible %s when searching for %s\n"
+msgstr "%P: đang nhảy qua %s không tương thích trong khi tìm kiếm %s\n"
+
+#: ldfile.c:267
+msgid "%F%P: attempted static link of dynamic object `%s'\n"
+msgstr "%F%P: đã cố liên kết tĩnh đối tượng động « %s »\n"
+
+#: ldfile.c:384
+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:387
+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:417
+msgid "%F%P: cannot find %s inside %s\n"
+msgstr "%F%P: không tìm thấy được %s ở trong %s\n"
+
+#: ldfile.c:420
+msgid "%F%P: cannot find %s\n"
+msgstr "%F%P: không tìm thấy được %s\n"
+
+#: ldfile.c:437 ldfile.c:453
+#, c-format
+msgid "cannot find script file %s\n"
+msgstr "không tìm thấy tập tin tập lệnh %s\n"
+
+#: ldfile.c:439 ldfile.c:455
+#, c-format
+msgid "opened script file %s\n"
+msgstr "đã mở tập tin tập lệnh %s\n"
+
+#: ldfile.c:499
+msgid "%P%F: cannot open linker script file %s: %E\n"
+msgstr "%P%F: không thể mở tập tin tập lệnh liên kết %s: %E\n"
+
+#: ldfile.c:546
+msgid "%P%F: cannot represent machine `%s'\n"
+msgstr "%P%F: không thể miêu tả máy « %s »\n"
+
+#: ldlang.c:940 ldlang.c:982 ldlang.c:2695
+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:1025
+msgid "%P:%S: warning: redeclaration of memory region '%s'\n"
+msgstr "%P:%S: cảnh báo : miá»n nhá»› « %s » được khai báo lại\n"
+
+#: ldlang.c:1031
+msgid "%P:%S: warning: memory region %s not declared\n"
+msgstr "%P:%S: cảnh báo : chÆ°a khai báo miá»n bá»™ nhá»› %s\n"
+
+#: ldlang.c:1108 ldlang.c:1135
+msgid "%P%F: failed creating section `%s': %E\n"
+msgstr "%P%F: lỗi tạo phần « %s »: %E\n"
+
+#: ldlang.c:1601
+msgid ""
+"\n"
+"Memory Configuration\n"
+"\n"
+msgstr ""
+"\n"
+"Cấu hình\n"
+"\n"
+
+#: ldlang.c:1603
+msgid "Name"
+msgstr "Tên"
+
+#: ldlang.c:1603
+msgid "Origin"
+msgstr "Gốc"
+
+#: ldlang.c:1603
+msgid "Length"
+msgstr "Äá»™ dài"
+
+#: ldlang.c:1603
+msgid "Attributes"
+msgstr "Thuộc tính"
+
+#: ldlang.c:1643
+#, c-format
+msgid ""
+"\n"
+"Linker script and memory map\n"
+"\n"
+msgstr ""
+"\n"
+"Tập lệnh liên kết và bản đồ bộ nhớ\n"
+"\n"
+
+#: ldlang.c:1709
+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:1716
+msgid "%P%F: output format %s cannot represent section called %s\n"
+msgstr "%P%F: khuôn dạng %s không thể miêu tả phần được gá»i là %s\n"
+
+#: ldlang.c:2313
+msgid "%B: file not recognized: %E\n"
+msgstr "%B: không nhận ra tập tin: %E\n"
+
+#: ldlang.c:2314
+msgid "%B: matching formats:"
+msgstr "%B: các dạng thức khớp với nhau :"
+
+#: ldlang.c:2321
+msgid "%F%B: file not recognized: %E\n"
+msgstr "%F%B: không nhận ra tập tin: %E\n"
+
+#: ldlang.c:2385
+msgid "%F%B: member %B in archive is not an object\n"
+msgstr "%F%B: bộ phạn kho %B không phải là đối tượng\n"
+
+#: ldlang.c:2396 ldlang.c:2410
+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:2665
+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 nào khớp với kiểu endian đã cần thiết\n"
+
+#: ldlang.c:2679
+msgid "%P%F: target %s not found\n"
+msgstr "%P%F: không tìm thấy đích %s\n"
+
+#: ldlang.c:2681
+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:2687
+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:2691
+msgid "%P%F:%s: can not set architecture: %E\n"
+msgstr "%P%F:%s: không thể lập kiến trúc: %E\n"
+
+#: ldlang.c:2839
+msgid "%P%F: bfd_hash_lookup failed creating symbol %s\n"
+msgstr "%P%F: « bfd_hash_lookup » (bfd băm tra cứu) thất bại, tạo ký hiệu %s\n"
+
+#: ldlang.c:2857
+msgid "%P%F: bfd_hash_allocate failed creating symbol %s\n"
+msgstr "%P%F: việc « bfd_hash_lookup » (bfd băm tra cứu) bị lỗi, tạo ký hiệu %s\n"
+
+#: ldlang.c:3288
+msgid " load address 0x%V"
+msgstr " tải địa chỉ 0x%V"
+
+#: ldlang.c:3528
+msgid "%W (size before relaxing)\n"
+msgstr "%W (kích cỡ trước khi lơi ra)\n"
+
+#: ldlang.c:3615
+#, c-format
+msgid "Address of section %s set to "
+msgstr "Äịa chỉ của phần %s được lập thành "
+
+#: ldlang.c:3768
+#, c-format
+msgid "Fail with %d\n"
+msgstr "Thất bại với %d\n"
+
+#: ldlang.c:4040
+msgid "%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"
+msgstr "%X%P: phần %s [%V → %V] đè lên phần %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: địa chỉ 0x%v cá»­a %B phần %s không phải ở trong miá»n %s\n"
+
+#: ldlang.c:4074
+msgid "%X%P: region %s is full (%B section %s)\n"
+msgstr "%X%P: miá»n %s đầy (%B phần %s)\n"
+
+#: ldlang.c:4114
+#, 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 thay đổi hay tiếp lên %s\n"
+
+#: ldlang.c:4139
+msgid "%P%X: Internal error on COFF shared library section %s\n"
+msgstr "%P%X: Lỗi nội bộ trên phần thư viên dùng chung COFF %s\n"
+
+#: ldlang.c:4197
+msgid "%P%F: error: no memory region specified for loadable section `%s'\n"
+msgstr "%P%F: lá»—i: chÆ°a ghi rõ miá»n bá»™ nhá»› cho phần tải được « %s »\n"
+
+#: ldlang.c:4202
+msgid "%P: warning: no memory region specified for loadable section `%s'\n"
+msgstr "%P: lá»—i: chÆ°a ghi rõ miá»n bá»™ nhá»› cho phần tải được « %s »\n"
+
+#: ldlang.c:4224
+msgid "%P: warning: changing start of section %s by %lu bytes\n"
+msgstr "%P: cảnh báo : đang thay đổi đầu phần %s bằng %lu byte\n"
+
+#: ldlang.c:4388
+msgid "%P%F: can't relax section: %E\n"
+msgstr "%P%F: không thể lơi ra phần: %E\n"
+
+#: ldlang.c:4636
+msgid "%F%P: invalid data statement\n"
+msgstr "%F%P: câu dữ liệu không hợp lệ\n"
+
+#: ldlang.c:4669
+msgid "%F%P: invalid reloc statement\n"
+msgstr "%F%P: câu định vị lại không hợp lệ\n"
+
+#: ldlang.c:4802
+msgid "%P%F:%s: can't set start address\n"
+msgstr "%P%F:%s: không thể lập địa chỉ đầu\n"
+
+#: ldlang.c:4815 ldlang.c:4834
+msgid "%P%F: can't set start address\n"
+msgstr "%P%F: không thể lập địa chỉ đầu\n"
+
+#: ldlang.c:4827
+msgid "%P: warning: cannot find entry symbol %s; defaulting to %V\n"
+msgstr "%P: cảnh báo : không tìm thấy được ký hiệu vào %s; nên dùng mặc định %V\n"
+
+#: ldlang.c:4839
+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 lập địa chỉ bắt đầu\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: Không há»— trợ liên kết định vị lại Ä‘Æ°á»c có định vị lại từ khuôn dạng %s (%B) sang khuôn dạng %s (%B)\n"
+
+#: ldlang.c:4898
+msgid "%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"
+msgstr "%P: cảnh báo: kiến trức %s của tập tin nhập « %B » không tương thích với dữ liệu xuất %s\n"
+
+#: ldlang.c:4920
+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 dữ liệu của tập tin %B\n"
+
+#: ldlang.c:5004
+msgid ""
+"\n"
+"Allocating common symbols\n"
+msgstr ""
+"\n"
+"Äang cấp phát các ký hiệu dùng chung\n"
+
+#: ldlang.c:5005
+msgid ""
+"Common symbol size file\n"
+"\n"
+msgstr ""
+"Ký hiệu cùng dùng cỡ tập tin\n"
+"\n"
+
+#: ldlang.c:5131
+msgid "%P%F: invalid syntax in flags\n"
+msgstr "%P%F: cụ pháp không hợp lệ trong các cá»\n"
+
+# Type: error
+# Description
+#: ldlang.c:5406
+msgid "%P%F: Failed to create hash table\n"
+msgstr "%P%F: Việc tạo bảng băm bị lỗi\n"
+
+#: ldlang.c:5722
+msgid "%P%F: multiple STARTUP files\n"
+msgstr "%P%F: có nhiá»u tập tin STARTUP (khởi chạy)\n"
+
+#: ldlang.c:5770
+msgid "%X%P:%S: section has both a load address and a load region\n"
+msgstr "%X%P:%S: phần có cả địa chỉ tải lẫn miá»n tải Ä‘á»u\n"
+
+#: ldlang.c:6007
+msgid "%F%P: bfd_record_phdr failed: %E\n"
+msgstr "%F%P: việc « bfd_record_phdr » bị lỗi: %E\n"
+
+#: ldlang.c:6027
+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 có « %s »\n"
+
+#: ldlang.c:6418
+msgid "%X%P: unknown language `%s' in version information\n"
+msgstr "%X%P: không biết ngôn ngữ « %s » trong thông tin phiên bản\n"
+
+#: ldlang.c:6560
+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:6569
+msgid "%X%P: duplicate version tag `%s'\n"
+msgstr "%X%P: thẻ phiên bản trùng « %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: biểu thức trùng « %s » trong thông tin phiên bản\n"
+
+#: ldlang.c:6665
+msgid "%X%P: unable to find version dependency `%s'\n"
+msgstr "%X%P: không tìm thấy được cách phục thuộc vào phiên bản « %s »\n"
+
+#: ldlang.c:6687
+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)\n"
+
+#: ldmain.c:232
+msgid "%X%P: can't set BFD default target to `%s': %E\n"
+msgstr "%X%P: không thể lập đích mặc định BFD thành « %s »: %E\n"
+
+#: ldmain.c:345
+msgid "%P%F: --relax and -r may not be used together\n"
+msgstr "%P%F: không cho phép sá»­ dụng hai tùy chá»n « --relax » (lÆ¡i ra) và « -r » vá»›i nhau \n"
+
+#: ldmain.c:347
+msgid "%P%F: -r and -shared may not be used together\n"
+msgstr "%P%F: không thể sá»­ dụng cả « -r » lẫn « -shared » (dùng chung) Ä‘á»u\n"
+
+#: ldmain.c:353
+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:355
+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:397
+msgid "using external linker script:"
+msgstr "đang dùng tập lệnh liên kết bên ngoài:"
+
+#: ldmain.c:399
+msgid "using internal linker script:"
+msgstr "đang dùng tập lệnh liên kết bên trong:"
+
+#: ldmain.c:433
+msgid "%P%F: no input files\n"
+msgstr "%P%F: không có tập tin nhập nào\n"
+
+#: ldmain.c:437
+msgid "%P: mode %s\n"
+msgstr "%P: chế độ %s\n"
+
+#: ldmain.c:453
+msgid "%P%F: cannot open map file %s: %E\n"
+msgstr "%P%F: không thể mở tập tin bản đồ %s: %E\n"
+
+#: ldmain.c:485
+msgid "%P: link errors found, deleting executable `%s'\n"
+msgstr "%P: tìm thấy một số lỗi liên kết nên xoá bỠtập tin chạy được « %s »\n"
+
+#: ldmain.c:494
+msgid "%F%B: final close failed: %E\n"
+msgstr "%F%B: việc đóng cuối cùng bị lỗi: %E\n"
+
+#: ldmain.c:520
+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:523
+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:530
+msgid "%P: Error writing file `%s'\n"
+msgstr "%P: Gặp lỗi khi ghi tập tin « %s »\n"
+
+#: ldmain.c:535 pe-dll.c:1494
+#, c-format
+msgid "%P: Error closing file `%s'\n"
+msgstr "%P: Gặp lỗi khi đóng tập tin « %s »\n"
+
+#: ldmain.c:551
+#, c-format
+msgid "%s: total time in link: %ld.%06ld\n"
+msgstr "%s: thá»i gian tổng trong liên kết: %ld.%06ld\n"
+
+#: ldmain.c:554
+#, c-format
+msgid "%s: data size %ld\n"
+msgstr "%s: kích cỡ dữ liệu %ld\n"
+
+#: ldmain.c:637
+msgid "%P%F: missing argument to -m\n"
+msgstr "%P%F: thiếu đối số tới « -m »\n"
+
+#: ldmain.c:784 ldmain.c:803 ldmain.c:834
+msgid "%P%F: bfd_hash_table_init failed: %E\n"
+msgstr "%P%F: việc « bfd_hash_table_init » (bfd băm bảng khởi động) bị lỗi: %E\n"
+
+#: ldmain.c:788 ldmain.c:807
+msgid "%P%F: bfd_hash_lookup failed: %E\n"
+msgstr "%P%F: việc « bfd_hash_lookup » (tra tìm băm BFD) bị lỗi: %E\n"
+
+#: ldmain.c:821
+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:864
+msgid "%P%F: bfd_hash_lookup for insertion failed: %E\n"
+msgstr "%P%F: việc « bfd_hash_lookup » (bfd băm tra cứu) cho sự chèn bị lỗi: %E\n"
+
+#: ldmain.c:869
+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:944
+#, c-format
+msgid ""
+"Archive member included because of file (symbol)\n"
+"\n"
+msgstr ""
+"Gồm bộ phạn kho vì tập tin (ký hiệu)\n"
+"\n"
+
+#: ldmain.c:1014
+msgid "%X%C: multiple definition of `%T'\n"
+msgstr "%X%C: « %T » đã được định nghÄ©a nhiá»u lần\n"
+
+#: ldmain.c:1017
+msgid "%D: first defined here\n"
+msgstr "%D: fiđã được định nghĩa đầu tiên ở đây\n"
+
+#: ldmain.c:1021
+msgid "%P: Disabling relaxation: it will not work with multiple definitions\n"
+msgstr "%P: Tắt khả năng lÆ¡i ra: nó sẽ không hoạt Ä‘á»™ng vá»›i nhiá»u lá»i định nghÄ©a\n"
+
+#: ldmain.c:1051
+msgid "%B: warning: definition of `%T' overriding common\n"
+msgstr "%B: cảnh báo: lá»i định nghÄ©a « %T » đè lên Ä‘iá»u dùng chung\n"
+
+#: ldmain.c:1054
+msgid "%B: warning: common is here\n"
+msgstr "%B: cảnh báo : common (cùng dùng) là đây\n"
+
+#: ldmain.c:1061
+msgid "%B: warning: common of `%T' overridden by definition\n"
+msgstr "%B: cảnh báo : Ä‘iá»u cùng dùng lá»›n hÆ¡n có đè lên Ä‘iá»u cùng dùng « %T »\n"
+
+#: ldmain.c:1064
+msgid "%B: warning: defined here\n"
+msgstr "%B: cảnh báo : Ä‘iá»u dùng chung lá»›n hÆ¡n tại đây\n"
+
+#: ldmain.c:1071
+msgid "%B: warning: common of `%T' overridden by larger common\n"
+msgstr "%B: cảnh báo : Ä‘iá»u « %T » dùng chung có đè lên Ä‘iá»u dùng chung nhá» hÆ¡n\n"
+
+#: ldmain.c:1074
+msgid "%B: warning: larger common is here\n"
+msgstr "%B: cảnh báo: Ä‘iá»u dùng chung lá»›n hÆ¡n tại đây\n"
+
+#: ldmain.c:1078
+msgid "%B: warning: common of `%T' overriding smaller common\n"
+msgstr "%B: cảnh báo: Ä‘iá»u « %T » dùng chung có đè lên Ä‘iá»u dùng chung nhá» hÆ¡n\n"
+
+#: ldmain.c:1081
+msgid "%B: warning: smaller common is here\n"
+msgstr "%B: cảnh báo : Ä‘iá»u cùng dùng nhá» hÆ¡n ở đây\n"
+
+#: ldmain.c:1085
+msgid "%B: warning: multiple common of `%T'\n"
+msgstr "%B: cảnh báo : nhiá»u Ä‘iá»u cùng dùng của « %T »\n"
+
+#: ldmain.c:1087
+msgid "%B: warning: previous common is here\n"
+msgstr "%B: cảnh báo : Ä‘iá»u cùng dùng trÆ°á»›c ở đây\n"
+
+#: ldmain.c:1107 ldmain.c:1145
+msgid "%P: warning: global constructor %s used\n"
+msgstr "%P: cảnh báo : bộ cấu trúc toàn cục %s được dùng\n"
+
+#: ldmain.c:1155
+msgid "%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"
+msgstr "%P%F: lỗi hậu phương: « BFD_RELOC_CTOR » không được hỗ trợ\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 "cảnh báo: "
+
+#: ldmain.c:1334
+msgid "%F%P: bfd_hash_table_init failed: %E\n"
+msgstr "%F%P: việc « bfd_hash_table_init » (bfd băm bảng khởi động) bị lỗi: %E\n"
+
+#: ldmain.c:1341
+msgid "%F%P: bfd_hash_lookup failed: %E\n"
+msgstr "%F%P: việc « bfd_hash_lookup » (tra tìm băm BFD) bị lỗi: %E\n"
+
+#: ldmain.c:1362
+msgid "%X%C: undefined reference to `%T'\n"
+msgstr "%X%C: tham chiếu chưa định nghĩa đến « %T »\n"
+
+#: ldmain.c:1365
+msgid "%C: warning: undefined reference to `%T'\n"
+msgstr "%C: cảnh báo : tham chiếu chưa định nghĩa đến « %T »\n"
+
+#: ldmain.c:1371
+msgid "%X%D: more undefined references to `%T' follow\n"
+msgstr "%X%D: more undefined references to `%T' follow\n"
+
+#: ldmain.c:1374
+msgid "%D: warning: more undefined references to `%T' follow\n"
+msgstr "%D: chÆ°a định nghÄ©a lá»i tham chiếu đến « %T » tại nhiá»u nÆ¡i nữa theo đây\n"
+
+#: ldmain.c:1385
+msgid "%X%B: undefined reference to `%T'\n"
+msgstr "%X%B: tham chiếu chưa định nghĩa đến « %T »\n"
+
+#: ldmain.c:1388
+msgid "%B: warning: undefined reference to `%T'\n"
+msgstr "%B: cảnh báo: chÆ°a định nghÄ©a lá»i tham chiếu đến « %T »\n"
+
+#: ldmain.c:1394
+msgid "%X%B: more undefined references to `%T' follow\n"
+msgstr "%X%B: có tham chiếu chưa định nghĩa đến « %T » thêm nữa theo sau\n"
+
+#: ldmain.c:1397
+msgid "%B: warning: more undefined references to `%T' follow\n"
+msgstr "%B: cảnh báo: chÆ°a định nghÄ©a lá»i tham chiếu đến « %T » tại nhiá»u nÆ¡i nữa theo đây\n"
+
+#: ldmain.c:1436
+msgid " additional relocation overflows omitted from the output\n"
+msgstr " tràn định vị lại thêm bị bá» Ä‘i khá»i dữ liệu xuất\n"
+
+#: ldmain.c:1449
+msgid " relocation truncated to fit: %s against undefined symbol `%T'"
+msgstr " sự định vị lại bị cắt xém để vừa: %s đối với ký hiệu chưa định nghĩa « %T »"
+
+#: ldmain.c:1454
+msgid " relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"
+msgstr " sự định vị lại bị cắt xém để vừa: %s đối với ký hiệu « %T » đã định nghĩa trong phần %A trong %B"
+
+#: ldmain.c:1466
+msgid " relocation truncated to fit: %s against `%T'"
+msgstr " sự định vị lại bị cắt xém để vừa: %s đối với « %T »"
+
+#: ldmain.c:1483
+#, c-format
+msgid "%X%C: dangerous relocation: %s\n"
+msgstr "%X%C: việc định vị lại nguy hiểm: %s\n"
+
+#: ldmain.c:1498
+msgid "%X%C: reloc refers to symbol `%T' which is not being output\n"
+msgstr "%X%C: việc định vị lại tham chiếu đến ký hiệu « %T » mà không đang được xuất\n"
+
+#: ldmisc.c:147
+#, c-format
+msgid "no symbol"
+msgstr "không có ký hiệu"
+
+#: ldmisc.c:238
+#, c-format
+msgid "built in linker script:%u"
+msgstr "tập lệnh liên kết có sẵn:%u"
+
+#: ldmisc.c:294 ldmisc.c:298
+msgid "%B%F: could not read symbols\n"
+msgstr "%B%F: không thể Ä‘á»c các ký hiệu\n"
+
+#: ldmisc.c:340
+msgid "%B: In function `%T'"
+msgstr "%B: trong hàm « %T »"
+
+#: ldmisc.c:510
+msgid "%F%P: internal error %s %d\n"
+msgstr "%F%P: lá»—i ná»™i bá»™ %s %d\n"
+
+#: ldmisc.c:556
+msgid "%P: internal error: aborting at %s line %d in %s\n"
+msgstr "%P: lỗi nội bộ : đang hủy bỠtại %s dòng %d trong %s\n"
+
+#: ldmisc.c:559
+msgid "%P: internal error: aborting at %s line %d\n"
+msgstr "%P: lỗi nội bộ : đang hủy bỠtại %s dòng %d\n"
+
+#: ldmisc.c:561
+msgid "%P%F: please report this bug\n"
+msgstr "%P%F: vui lòng 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 version %s\n"
+msgstr "Trình ld phiên bản %s của GNU\n"
+
+#: ldver.c:42
+#, c-format
+msgid "Copyright 2005 Free Software Foundation, Inc.\n"
+msgstr "Bản quyá»n © năm 2005 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. This program has absolutely no warranty.\n"
+msgstr ""
+"ChÆ°Æ¡ng trình này là phần má»m tá»± do mà không bảo đảm gì cả.\n"
+"Bạn có thể phân phối lại nó vá»›i Ä‘iá»u kiện của Quyá»n công chung Gnu (GPL).\n"
+
+#: ldver.c:52
+#, c-format
+msgid " Supported emulations:\n"
+msgstr " Mô phá»ng đã há»— trợ :\n"
+
+#: ldwrite.c:55 ldwrite.c:191
+msgid "%P%F: bfd_new_link_order failed\n"
+msgstr "%P%F: việc « bfd_new_link_order » (bfd mới liên kết thứ tự) bị lỗi\n"
+
+#: ldwrite.c:344
+msgid "%F%P: cannot create split section name for %s\n"
+msgstr "%F%P: không thể tạo tên phần đã chia tách cho %s\n"
+
+#: ldwrite.c:356
+msgid "%F%P: clone section failed: %E\n"
+msgstr "%F%P: việc bắt chước phần bị lỗi: %E\n"
+
+#: ldwrite.c:394
+#, c-format
+msgid "%8x something else\n"
+msgstr "%8x cái gì khác\n"
+
+#: ldwrite.c:564
+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:196 lexsup.c:328
+msgid "KEYWORD"
+msgstr "TỪ_KHOÃ"
+
+#: lexsup.c:196
+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:199
+msgid "ARCH"
+msgstr "ARCH"
+
+#: lexsup.c:199
+msgid "Set architecture"
+msgstr "Lập kiến trúc"
+
+#: lexsup.c:201 lexsup.c:422
+msgid "TARGET"
+msgstr "ÄÃCH"
+
+#: lexsup.c:201
+msgid "Specify target for following input files"
+msgstr "Ghi rõ đích cho những tập tin nhập theo đây"
+
+#: lexsup.c:204 lexsup.c:253 lexsup.c:265 lexsup.c:278 lexsup.c:381
+#: lexsup.c:434 lexsup.c:491
+msgid "FILE"
+msgstr "TẬP TIN"
+
+#: lexsup.c:204
+msgid "Read MRI format linker script"
+msgstr "Äá»c tập lệnh liên kết khuôn dạng MRI"
+
+#: lexsup.c:206
+msgid "Force common symbols to be defined"
+msgstr "Ép buá»™c định nghÄ©a má»i ký hiệu dùng chung"
+
+#: lexsup.c:210 lexsup.c:476 lexsup.c:478 lexsup.c:480
+msgid "ADDRESS"
+msgstr "ÄỊA CHỈ"
+
+#: lexsup.c:210
+msgid "Set start address"
+msgstr "Lập địa chỉ bắt đầu"
+
+#: lexsup.c:212
+msgid "Export all dynamic symbols"
+msgstr "Xuất má»i ký hiệu Ä‘á»™ng"
+
+#: lexsup.c:214
+msgid "Link big-endian objects"
+msgstr "Liên kết má»i đối tượng big-endian (cuối lá»›n)"
+
+#: lexsup.c:216
+msgid "Link little-endian objects"
+msgstr "Liên kết má»i đối tượng little-endian (cuối nhá»)"
+
+#: lexsup.c:218 lexsup.c:221
+msgid "SHLIB"
+msgstr "SHLIB"
+
+#: lexsup.c:218
+msgid "Auxiliary filter for shared object symbol table"
+msgstr "Bá»™ lá»c phụ cho bảng ký hiệu đối tượng dùng chung"
+
+#: lexsup.c:221
+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:224
+msgid "Ignored"
+msgstr "Bị bỠqua"
+
+#: lexsup.c:226
+msgid "SIZE"
+msgstr "Cá» "
+
+#: lexsup.c:226
+msgid "Small data size (if no size, same as --shared)"
+msgstr "Kích cỡ dữ liệu nhá» (nếu không có, nó bằng tùy chá»n « --shared »)"
+
+#: lexsup.c:229
+msgid "FILENAME"
+msgstr "TÊN TẬP TIN"
+
+#: lexsup.c:229
+msgid "Set internal name of shared library"
+msgstr "Lập tên nội bộ của thư viên dùng chung"
+
+#: lexsup.c:231
+msgid "PROGRAM"
+msgstr "CHƯƠNG TRÌNH"
+
+#: lexsup.c:231
+msgid "Set PROGRAM as the dynamic linker to use"
+msgstr "Lập CHƯƠNG TRÌNH là bộ liên kết động cần dùng"
+
+#: lexsup.c:234
+msgid "LIBNAME"
+msgstr "TÊN THƯ VIÊN"
+
+#: lexsup.c:234
+msgid "Search for library LIBNAME"
+msgstr "Tìm kiếm thư viên TÊN THƯ VIÊN"
+
+#: lexsup.c:236
+msgid "DIRECTORY"
+msgstr "THƯ MỤC"
+
+#: lexsup.c:236
+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:239
+msgid "Override the default sysroot location"
+msgstr "Äè lên địa Ä‘iểm sysroot (gốc hệ thống) mặc định"
+
+#: lexsup.c:241
+msgid "EMULATION"
+msgstr "MÔ PHỎNG"
+
+#: lexsup.c:241
+msgid "Set emulation"
+msgstr "Lập cách mô phá»ng"
+
+#: lexsup.c:243
+msgid "Print map file on standard output"
+msgstr "In tập tin bản đồ ra thiết bị xuất chuẩn"
+
+#: lexsup.c:245
+msgid "Do not page align data"
+msgstr "Äừng canh lá» trang dữ liệu"
+
+#: lexsup.c:247
+msgid "Do not page align data, do not make text readonly"
+msgstr "Äừng canh lá» trang dữ liệu, đừng lập văn bản là chỉ Ä‘á»c"
+
+#: lexsup.c:250
+msgid "Page align data, make text readonly"
+msgstr "Canh lá» trang dữ liệu, lập văn bản là chỉ Ä‘á»c"
+
+#: lexsup.c:253
+msgid "Set output file name"
+msgstr "Lập tên tập tin xuất"
+
+#: lexsup.c:255
+msgid "Optimize output file"
+msgstr "Ưu tiên hóa tập tin xuất"
+
+#: lexsup.c:257
+msgid "Ignored for SVR4 compatibility"
+msgstr "Bị bỠqua để tương thích với SVR4"
+
+#: lexsup.c:261
+msgid "Generate relocatable output"
+msgstr "Tạo ra dữ liệu có thể định vị lại"
+
+#: lexsup.c:265
+msgid "Just link symbols (if directory, same as --rpath)"
+msgstr "Chỉ liên kết ký hiệu (nếu thÆ° mục, bằng tùy chá»n « --rpath »)"
+
+#: lexsup.c:268
+msgid "Strip all symbols"
+msgstr "TÆ°á»›c má»i ký hiệu"
+
+#: lexsup.c:270
+msgid "Strip debugging symbols"
+msgstr "Tước ký hiệu gỡ lối"
+
+#: lexsup.c:272
+msgid "Strip symbols in discarded sections"
+msgstr "Tước ký hiệu trong phần bị hủy"
+
+#: lexsup.c:274
+msgid "Do not strip symbols in discarded sections"
+msgstr "Äừng tÆ°á»›c ký hiệu trong phần bị hủy"
+
+#: lexsup.c:276
+msgid "Trace file opens"
+msgstr "Tập tin vết có mở"
+
+#: lexsup.c:278
+msgid "Read linker script"
+msgstr "Äá»c tập lệnh liên kết"
+
+#: lexsup.c:280 lexsup.c:298 lexsup.c:364 lexsup.c:379 lexsup.c:469
+#: lexsup.c:494 lexsup.c:521
+msgid "SYMBOL"
+msgstr "Kà HIỆU"
+
+#: lexsup.c:280
+msgid "Start with undefined reference to SYMBOL"
+msgstr "Bắt đầu với tham chiệu gạch chân đến Kà HIỆU"
+
+#: lexsup.c:283
+msgid "[=SECTION]"
+msgstr "[=PHẦN]"
+
+#: lexsup.c:284
+msgid "Don't merge input [SECTION | orphan] sections"
+msgstr "Äừng kết hợp phần nhập [PHẦN | mồ côi]"
+
+#: lexsup.c:286
+msgid "Build global constructor/destructor tables"
+msgstr "Xây dụng bảng cấu tạo/phá toàn cục"
+
+#: lexsup.c:288
+msgid "Print version information"
+msgstr "In ra thông tin phiên bản"
+
+#: lexsup.c:290
+msgid "Print version and emulation information"
+msgstr "In ra thông tin phiên bản và mô phá»ng"
+
+#: lexsup.c:292
+msgid "Discard all local symbols"
+msgstr "Hủy má»i ký hiệu cục bá»™"
+
+#: lexsup.c:294
+msgid "Discard temporary local symbols (default)"
+msgstr "Hủy má»i ký hiệu cục bá»™ tạm thá»i (mặc định)"
+
+#: lexsup.c:296
+msgid "Don't discard any local symbols"
+msgstr "Äừng hủy ký hiệu cục bá»™ nào"
+
+#: lexsup.c:298
+msgid "Trace mentions of SYMBOL"
+msgstr "Vết nơi ghi Kà HIỆU"
+
+#: lexsup.c:300 lexsup.c:436 lexsup.c:438
+msgid "PATH"
+msgstr "ÄƯỜNG DẪN"
+
+#: lexsup.c:300
+msgid "Default search path for Solaris compatibility"
+msgstr "ÄÆ°á»ng dẫn tìm kiếm để tÆ°Æ¡ng thích vá»›i Solaris"
+
+#: lexsup.c:303
+msgid "Start a group"
+msgstr "Bắt đầu nhóm"
+
+#: lexsup.c:305
+msgid "End a group"
+msgstr "Kết thức nhóm"
+
+#: lexsup.c:309
+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 thể được tháo gỡ"
+
+#: lexsup.c:313
+msgid "Reject input files whose architecture is unknown"
+msgstr "Từ chối tập tin nhập có kiến trức lạ"
+
+#: lexsup.c:316
+msgid ""
+"Set DT_NEEDED tags for DT_NEEDED entries in\n"
+"\t\t\t\tfollowing dynamic libs"
+msgstr ""
+"Lập thẻ « DT_NEEDED » (cần thiết DT)\n"
+"\tcho mục nhập « DT_NEEDED »\n"
+"\ttrong những thư viên động theo đây"
+
+#: lexsup.c:319
+msgid ""
+"Do not set DT_NEEDED tags for DT_NEEDED entries\n"
+"\t\t\t\tin following dynamic libs"
+msgstr ""
+"Äừng lập thẻ « DT_NEEDED » (cần thiết DT)\n"
+"\tcho mục nhập « DT_NEEDED »\n"
+"\ttrong những thư viên động theo đây"
+
+#: lexsup.c:322
+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:325
+msgid "Always set DT_NEEDED for following dynamic libs"
+msgstr ""
+"Luôn lập thẻ « DT_NEEDED » (cần thiết DT)\n"
+"\tcho những thư viên động theo đây"
+
+#: lexsup.c:328
+msgid "Ignored for SunOS compatibility"
+msgstr "Bị bỠqua để tương thích với SunOS"
+
+#: lexsup.c:330
+msgid "Link against shared libraries"
+msgstr "Liên kết đối với thư viên dùng chung"
+
+#: lexsup.c:336
+msgid "Do not link against shared libraries"
+msgstr "Äừng liên kết đối vá»›i thÆ° viên dùng chung"
+
+#: lexsup.c:344
+msgid "Bind global references locally"
+msgstr "Äóng kết tham chiếu toàn cục má»™t cách cục bá»™"
+
+#: lexsup.c:346
+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:349
+msgid "Do not check section addresses for overlaps"
+msgstr "Äừng kiểm tra địa chỉ phần có chồng chéo"
+
+#: lexsup.c:352
+msgid "Output cross reference table"
+msgstr "Xuất bảng tham chiếu chéo"
+
+#: lexsup.c:354
+msgid "SYMBOL=EXPRESSION"
+msgstr "Kà HIỆU=BIỂU THỨC"
+
+#: lexsup.c:354
+msgid "Define a symbol"
+msgstr "Äịnh nghÄ©a ký hiệu"
+
+#: lexsup.c:356
+msgid "[=STYLE]"
+msgstr "[=KIỂU DÃNG]"
+
+#: lexsup.c:356
+msgid "Demangle symbol names [using STYLE]"
+msgstr "Tháo gỡ tên ký hiệu [bằng KIỂU DÃNG]"
+
+#: lexsup.c:359
+msgid "Generate embedded relocs"
+msgstr "Tạo ra sự định vị lại nhúng"
+
+#: lexsup.c:361
+msgid "Treat warnings as errors"
+msgstr "Xử lý cảnh báo là lỗi"
+
+#: lexsup.c:364
+msgid "Call SYMBOL at unload-time"
+msgstr "Gá»i Kà HIỆU vào lúc bá» tải"
+
+#: lexsup.c:366
+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:368
+msgid "Remove unused sections (on some targets)"
+msgstr "Gỡ bỠphần không dùng (trên một số đích)"
+
+#: lexsup.c:371
+msgid "Don't remove unused sections (default)"
+msgstr "Äừng gỡ bá» phần không dùng (mặc định)"
+
+#: lexsup.c:374
+msgid "Set default hash table size close to <NUMBER>"
+msgstr "Lập kích cỡ bảng băm mặc định là gần <Sá»>"
+
+#: lexsup.c:377
+msgid "Print option help"
+msgstr "In ra trợ giúp vá» tùy chá»n"
+
+#: lexsup.c:379
+msgid "Call SYMBOL at load-time"
+msgstr "Gá»i Kà HIỆU vào lúc tải"
+
+#: lexsup.c:381
+msgid "Write a map file"
+msgstr "Ghi tập tin bản đồ"
+
+#: lexsup.c:383
+msgid "Do not define Common storage"
+msgstr "Äừng định nghÄ©a kho dùng chung"
+
+#: lexsup.c:385
+msgid "Do not demangle symbol names"
+msgstr "Äừng tháo gỡ tên ký hiệu"
+
+#: lexsup.c:387
+msgid "Use less memory and more disk I/O"
+msgstr "Chiếm ít bá»™ nhá»› hÆ¡n, và nhiá»u nhập/xuất Ä‘Ä©a hÆ¡n"
+
+#: lexsup.c:389
+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:392
+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:396
+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:400
+msgid "Allow multiple definitions"
+msgstr "Cho phép nhiá»u lá»i định nghÄ©a"
+
+#: lexsup.c:402
+msgid "Disallow undefined version"
+msgstr "BỠcho phép phiên bản chưa định nghĩa"
+
+#: lexsup.c:404
+msgid "Create default symbol version"
+msgstr "Tạo phiên bản ký hiệu mặc định"
+
+#: lexsup.c:407
+msgid "Create default symbol version for imported symbols"
+msgstr "Tạo phiên bản ký hiệu mặc định cho ký hiệu đã nhập"
+
+#: lexsup.c:410
+msgid "Don't warn about mismatched input files"
+msgstr "Äừng cảnh báo vá» tập tin nhập không khá»›p vá»›i nhau"
+
+#: lexsup.c:412
+msgid "Turn off --whole-archive"
+msgstr "Tắt tùy chá»n « --whole-archive » (toàn kho)"
+
+#: lexsup.c:414
+msgid "Create an output file even if errors occur"
+msgstr "Tạo tập tin xuất dù gặp lỗi"
+
+#: lexsup.c:419
+msgid ""
+"Only use library directories specified on\n"
+"\t\t\t\tthe command line"
+msgstr ""
+"Chỉ dùng thư mục thư viên\n"
+"\tđược ghi rõ trên dòng lệnh"
+
+#: lexsup.c:422
+msgid "Specify target of output file"
+msgstr "Ghi rõ đích của tập tin xuất"
+
+#: lexsup.c:425
+msgid "Ignored for Linux compatibility"
+msgstr "Bị bỠqua để tương thích với Linux"
+
+#: lexsup.c:428
+msgid "Reduce memory overheads, possibly taking much longer"
+msgstr "Giảm bá»™ nhá»› duy tu, có thể mất rất nhiá»u thá»i gian hÆ¡n"
+
+#: lexsup.c:431
+msgid "Relax branches on certain targets"
+msgstr "Lơi ra nhánh trên một số đích nào đó"
+
+#: lexsup.c:434
+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:436
+msgid "Set runtime shared library search path"
+msgstr "Lập Ä‘Æ°á»ng dẫn tìm kiếm thÆ° viên dùng chung vào lúc chạy"
+
+#: lexsup.c:438
+msgid "Set link time shared library search path"
+msgstr "Lập Ä‘Æ°á»ng dẫn tìm kiếm thÆ° viên dùng chung vào lúc liên kết"
+
+#: lexsup.c:441
+msgid "Create a shared library"
+msgstr "Tạo thư viên dùng chung"
+
+#: lexsup.c:445
+msgid "Create a position independent executable"
+msgstr "Tạo ứng dụng chạy được không phụ thuộc vào vị trí"
+
+#: lexsup.c:449
+msgid "Sort common symbols by size"
+msgstr "Sắp xếp ký hiệu dùng chung theo kích cỡ"
+
+#: lexsup.c:453
+msgid "name|alignment"
+msgstr "tên|canh_hàng"
+
+#: lexsup.c:454
+msgid "Sort sections by name or maximum alignment"
+msgstr "Sắp xếp phần theo tên hay canh lỠtối đa"
+
+#: lexsup.c:456
+msgid "COUNT"
+msgstr "Sá»_ÄẾM"
+
+#: lexsup.c:456
+msgid "How many tags to reserve in .dynamic section"
+msgstr "Số thẻ cần giữ lại trong phần « .dynamic » (động)"
+
+#: lexsup.c:459
+msgid "[=SIZE]"
+msgstr "[=Cá» ]"
+
+#: lexsup.c:459
+msgid "Split output sections every SIZE octets"
+msgstr "Chia tách phần xuất tại mỗi CỠ bộ tám"
+
+#: lexsup.c:462
+msgid "[=COUNT]"
+msgstr "[=Sá»_ÄẾM]"
+
+#: lexsup.c:462
+msgid "Split output sections every COUNT relocs"
+msgstr "Chia tách phần xuất tại má»—i Sá»_ÄẾM việc định vị lại"
+
+#: lexsup.c:465
+msgid "Print memory usage statistics"
+msgstr "In ra thống kê cách sử dụng bộ nhớ"
+
+#: lexsup.c:467
+msgid "Display target specific options"
+msgstr "Hiển thị tùy chá»n đặc trÆ°ng cho đích"
+
+#: lexsup.c:469
+msgid "Do task level linking"
+msgstr "Liên kết trong lớp tác vụ"
+
+#: lexsup.c:471
+msgid "Use same format as native linker"
+msgstr "Dùng cùng khuôn dạng với bộ liên kết sở hữu"
+
+#: lexsup.c:473
+msgid "SECTION=ADDRESS"
+msgstr "PHẦN=ÄỊA CHỈ"
+
+#: lexsup.c:473
+msgid "Set address of named section"
+msgstr "Lập địa chỉ của phần có tên"
+
+#: lexsup.c:476
+msgid "Set address of .bss section"
+msgstr "Lập địa chỉ của phần « .bss »"
+
+#: lexsup.c:478
+msgid "Set address of .data section"
+msgstr "Lập địa chỉ của phần « .data » (dữ liệu)"
+
+#: lexsup.c:480
+msgid "Set address of .text section"
+msgstr "Lập địa chỉ của phần « .text » (văn bản)"
+
+#: 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 ""
+"Cách quản lý ký hiệu chưa tháo gỡ.\n"
+" \t<phương_pháp> là:\n"
+" • ignore-all\t\t\t\tbỠqua hết\n"
+" • report-all\t\t\t\tthông báo hết\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:487
+msgid "Output lots of information during link"
+msgstr "Xuất nhiá»u thông tin trong khi liên kết"
+
+#: lexsup.c:491
+msgid "Read version information script"
+msgstr "Äá»c tập lệnh thông tin phiên bản"
+
+#: lexsup.c:494
+msgid ""
+"Take export symbols list from .exports, using\n"
+"\t\t\t\tSYMBOL as the version."
+msgstr ""
+"Lấy danh sách ký hiệu xuất từ « .exports » (xuất),\n"
+"\t\tvới phiên bản là Kà HIỆU"
+
+#: lexsup.c:497
+msgid "Warn about duplicate common symbols"
+msgstr "Cảnh báo vỠký hiệu dùng chung trùng"
+
+#: lexsup.c:499
+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:502
+msgid "Warn if the multiple GP values are used"
+msgstr "Cảnh báo nếu sá»­ dụng nhiá»u giá trị GP"
+
+#: lexsup.c:504
+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 định nghĩa"
+
+#: lexsup.c:506
+msgid "Warn if start of section changes due to alignment"
+msgstr "Cảnh báo nếu đầu phần thay đổi vì canh lá»"
+
+#: lexsup.c:509
+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:513
+msgid "Report unresolved symbols as warnings"
+msgstr "Thông báo ký hiệu chưa tháo gỡ là cảnh báo"
+
+#: lexsup.c:516
+msgid "Report unresolved symbols as errors"
+msgstr "Thông báo ký hiệu chưa tháo gỡ là lỗi"
+
+#: lexsup.c:518
+msgid "Include all objects from following archives"
+msgstr "Gồm má»i đối tượng từ những kho theo đây"
+
+#: lexsup.c:521
+msgid "Use wrapper functions for SYMBOL"
+msgstr "Sử dụng hàm cuốn cho Kà HIỆU"
+
+#: lexsup.c:668
+msgid "%P: unrecognized option '%s'\n"
+msgstr "%P: không nhận ra tùy chá»n « %s »\n"
+
+#: lexsup.c:670
+msgid "%P%F: use the --help option for usage information\n"
+msgstr "%P%F: hãy sá»­ dụng tùy chá»n « --help » để xem thông tin vá» cách sá»­ dụng\n"
+
+#: lexsup.c:688
+msgid "%P%F: unrecognized -a option `%s'\n"
+msgstr "%P%F: không nhận ra tùy chá»n kiểu « -a » là « %s »\n"
+
+#: lexsup.c:701
+msgid "%P%F: unrecognized -assert option `%s'\n"
+msgstr "%P%F: không nhận ra tùy chá»n kiểu « -assert » (khẳng định) là « %s »\n"
+
+#: lexsup.c:744
+msgid "%F%P: unknown demangling style `%s'"
+msgstr "%F%Ps: không biết kiểu dáng tháo gõ « %s »"
+
+#: lexsup.c:806
+msgid "%P%F: invalid number `%s'\n"
+msgstr "%P%F: số không hợp lệ « %s »\n"
+
+#: lexsup.c:898
+msgid "%P%F: bad --unresolved-symbols option: %s\n"
+msgstr "%P%F: tùy chá»n « --unresolved-symbols » (các ký hiệu chÆ°a tháo gỡ) 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:969
+msgid "%P%F: bad -rpath option\n"
+msgstr "%P%F: tùy chá»n « -rpath » (Ä‘Æ°á»ng dẫn r) sai\n"
+
+#: lexsup.c:1081
+msgid "%P%F: -shared not supported\n"
+msgstr "%P%F: không há»— trợ tùy chá»n « -shared » (dùng chung)\n"
+
+#: lexsup.c:1090
+msgid "%P%F: -pie not supported\n"
+msgstr "%P%F: không há»— trợ tùy chá»n « -pie » (bánh)\n"
+
+#: lexsup.c:1100
+msgid "name"
+msgstr "tên"
+
+#: lexsup.c:1102
+msgid "alignment"
+msgstr "canh lá»"
+
+#: lexsup.c:1105
+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:1131
+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:1138
+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 » (bắt đầu phần)\n"
+
+#: lexsup.c:1312
+msgid "%P%F: may not nest groups (--help for usage)\n"
+msgstr "%P%F: không cho phép lồng nhóm với nhau (« --help » để xem cách sử dụng đúng)\n"
+
+#: lexsup.c:1319
+msgid "%P%F: group ended before it began (--help for usage)\n"
+msgstr "%P%F: nhóm kết thức trước bắt đầu (« --help » để xem cách sử dụng đúng)\n"
+
+#: lexsup.c:1347
+msgid "%P%X: --hash-size needs a numeric argument\n"
+msgstr "%P%X: tùy chá»n « --hash-size » (kích cỡ băm) cần thiết đối số thuá»™c số\n"
+
+#: lexsup.c:1398 lexsup.c:1411
+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:1447
+#, 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:1449
+#, c-format
+msgid "Options:\n"
+msgstr "Tùy chá»n:\n"
+
+#: lexsup.c:1527
+#, c-format
+msgid " @FILE"
+msgstr " @TẬP_TIN"
+
+#: lexsup.c:1530
+#, 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:1535
+#, c-format
+msgid "%s: supported targets:"
+msgstr "%s: đích hỗ trợ :"
+
+#: lexsup.c:1543
+#, c-format
+msgid "%s: supported emulations: "
+msgstr "%s: mô phá»ng há»— trợ : "
+
+#: lexsup.c:1548
+#, c-format
+msgid "%s: emulation specific options:\n"
+msgstr "%s: tùy chá»n đặc trÆ°ng cho mô phá»ng:\n"
+
+#: lexsup.c:1552
+#, c-format
+msgid "Report bugs to %s\n"
+msgstr "Hãy thông báo lỗi nào cho %s\n"
+
+#: mri.c:291
+msgid "%P%F: unknown format type %s\n"
+msgstr "%P%F: không biết kiểu khuôn dạng %s\n"
+
+#: pe-dll.c:303
+#, c-format
+msgid "%XUnsupported PEI architecture: %s\n"
+msgstr "%XChưa hỗ trợ kiến trúc PEI: %s\n"
+
+#: pe-dll.c:604
+#, c-format
+msgid "%XCannot export %s: invalid export name\n"
+msgstr "%XKhông thể xuất %s: tên xuất không hợp lệ\n"
+
+#: pe-dll.c:657
+#, c-format
+msgid "%XError, duplicate EXPORT with ordinals: %s (%d vs %d)\n"
+msgstr "%XLá»—i: XUẤT trùng vá»›i Ä‘iá»u thứ tá»± : %s (%d so vá»›i %d)\n"
+
+#: pe-dll.c:664
+#, c-format
+msgid "Warning, duplicate EXPORT: %s\n"
+msgstr "Cảnh báo, XUẤT trùng: %s\n"
+
+#: pe-dll.c:751
+#, c-format
+msgid "%XCannot export %s: symbol not defined\n"
+msgstr "%XKhông thể xuất %s: chưa định nghĩa ký hiệu\n"
+
+#: pe-dll.c:757
+#, c-format
+msgid "%XCannot export %s: symbol wrong type (%d vs %d)\n"
+msgstr "%XKhông thể xuất %s: ký hiệu sai kiểu (%d so với %d)\n"
+
+#: pe-dll.c:764
+#, c-format
+msgid "%XCannot export %s: symbol not found\n"
+msgstr "%XKhông thể xuất %s: không tìm thấy ký hiệu\n"
+
+#: pe-dll.c:877
+#, 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:1219
+#, c-format
+msgid "%XError: %d-bit reloc in dll\n"
+msgstr "%XLỗi: việc định vị lại %d-bit trong dll\n"
+
+#: pe-dll.c:1347
+#, c-format
+msgid "%s: Can't open output def file %s\n"
+msgstr "%s: Không thể mở tập tin xuất def (định nghĩa) %s\n"
+
+#: pe-dll.c:1490
+#, c-format
+msgid "; no contents available\n"
+msgstr "; không có nội dung sẵn sàng\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: không thể tá»± Ä‘á»™ng nhập 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 trình ld, để xem chi tiết.\n"
+
+#: pe-dll.c:2282
+#, 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:2287
+#, c-format
+msgid "Creating library file: %s\n"
+msgstr "Äang tạo tập tin thÆ° viên: %s\n"
+
+#~ msgid "%P%F: out of memory during initialization"
+#~ msgstr "%P%F: hết bộ nhớ trong khi cài đặt"
+
+#~ msgid "%P%F: -static and -shared may not be used together\n"
+#~ msgstr "%P%F: không thể sá»­ dụng cả « -static » (tÄ©nh) lẫn « -shared » (dùng chung) Ä‘á»u\n"
+
+#~ msgid "%P%X: generated"
+#~ msgstr "%P%X: đã tạo ra"
diff --git a/binutils-2.17/ld/po/zh_CN.gmo b/binutils-2.17/ld/po/zh_CN.gmo
new file mode 100644
index 00000000..3f41d578
--- /dev/null
+++ b/binutils-2.17/ld/po/zh_CN.gmo
Binary files differ
diff --git a/binutils-2.17/ld/po/zh_CN.po b/binutils-2.17/ld/po/zh_CN.po
new file mode 100644
index 00000000..bed69b07
--- /dev/null
+++ b/binutils-2.17/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-translation@lists.linux.net.cn>\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.17/ld/scripttempl/README b/binutils-2.17/ld/scripttempl/README
new file mode 100644
index 00000000..26ad2e93
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/a29k.sc b/binutils-2.17/ld/scripttempl/a29k.sc
new file mode 100644
index 00000000..2825b1e8
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/a29k.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.17/ld/scripttempl/aix.sc b/binutils-2.17/ld/scripttempl/aix.sc
new file mode 100644
index 00000000..cdd3eac8
--- /dev/null
+++ b/binutils-2.17/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}}
+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.17/ld/scripttempl/alpha.sc b/binutils-2.17/ld/scripttempl/alpha.sc
new file mode 100644
index 00000000..44a10c46
--- /dev/null
+++ b/binutils-2.17/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}
+
+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.17/ld/scripttempl/aout.sc b/binutils-2.17/ld/scripttempl/aout.sc
new file mode 100644
index 00000000..80dbb379
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/armaout.sc b/binutils-2.17/ld/scripttempl/armaout.sc
new file mode 100644
index 00000000..9bae887d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/armbpabi.sc b/binutils-2.17/ld/scripttempl/armbpabi.sc
new file mode 100644
index 00000000..c8d1bd4b
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/armbpabi.sc
@@ -0,0 +1,428 @@
+# 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*) }"
+STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }"
+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=" "
+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
+ 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)
+ }"
+
+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})
+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.*})
+ KEEP (*(.text.*personality*))
+ /* .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 = .);}}
+ }
+ .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 ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
+ KEEP (*(.fini_array))
+ KEEP (*(SORT(.fini_array.*)))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
+ }
+
+ ${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.*})
+ KEEP (*(.gnu.linkonce.d.*personality*))
+ ${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) }
+ .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) }
+
+ ${STACK_ADDR+${STACK}}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+ ${RELOCATING+${STACKNOTE}}
+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.17/ld/scripttempl/armcoff.sc b/binutils-2.17/ld/scripttempl/armcoff.sc
new file mode 100644
index 00000000..781301c8
--- /dev/null
+++ b/binutils-2.17/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}
+
+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.17/ld/scripttempl/avr.sc b/binutils-2.17/ld/scripttempl/avr.sc
new file mode 100644
index 00000000..d297b4a7
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/avr.sc
@@ -0,0 +1,224 @@
+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 = 0x800060, 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 :
+ {
+ *(.vectors)
+ KEEP(*(.vectors))
+
+ ${CONSTRUCTING+ __ctors_start = . ; }
+ ${CONSTRUCTING+ *(.ctors) }
+ ${CONSTRUCTING+ __ctors_end = . ; }
+ ${CONSTRUCTING+ __dtors_start = . ; }
+ ${CONSTRUCTING+ *(.dtors) }
+ ${CONSTRUCTING+ __dtors_end = . ; }
+ KEEP(SORT(*)(.ctors))
+ KEEP(SORT(*)(.dtors))
+
+ /* For data that needs to reside in the lower 64k of progmem */
+ *(.progmem.gcc*)
+ *(.progmem*)
+ ${RELOCATING+. = ALIGN(2);}
+
+ /* for future tablejump instruction arrays for 3 byte pc devices */
+ *(.jumptables)
+ *(.jumptables*)
+ /* for code that needs to reside in the lower 128k progmem */
+ *(.lowtext)
+ *(.lowtext*)
+
+ *(.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+ SIZEOF(.data) + ADDR(.data)} :
+ {
+ ${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+ SIZEOF(.bss) + ADDR(.bss)} :
+ {
+ ${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) }
+ .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) }
+}
+EOF
+
diff --git a/binutils-2.17/ld/scripttempl/crisaout.sc b/binutils-2.17/ld/scripttempl/crisaout.sc
new file mode 100644
index 00000000..acdca7a9
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/crisaout.sc
@@ -0,0 +1,131 @@
+cat <<EOF
+OUTPUT_FORMAT("a.out-cris")
+OUTPUT_ARCH(cris)
+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 (*(EXCLUDE_FILE (*crtend*.o) .ctors))}
+ ${CONSTRUCTING+ KEEP (*(SORT(.ctors.*)))}
+ ${CONSTRUCTING+ KEEP (*(.ctors))}
+ ${CONSTRUCTING+ PROVIDE(___ctors_end = .);}
+
+ ${CONSTRUCTING+ PROVIDE(___dtors = .);}
+ ${CONSTRUCTING+ KEEP (*crtbegin*.o(.dtors))}
+ ${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*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.17/ld/scripttempl/delta68.sc b/binutils-2.17/ld/scripttempl/delta68.sc
new file mode 100644
index 00000000..d9963054
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/delta68.sc
@@ -0,0 +1,49 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+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.17/ld/scripttempl/dlx.sc b/binutils-2.17/ld/scripttempl/dlx.sc
new file mode 100644
index 00000000..b222b335
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/ebmon29k.sc b/binutils-2.17/ld/scripttempl/ebmon29k.sc
new file mode 100644
index 00000000..62050ee2
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/ebmon29k.sc
@@ -0,0 +1,27 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+ENTRY(start)
+
+SECTIONS {
+ .text ${RELOCATING+${TEXT_START_ADDR}} :
+ {
+ *(.text);
+ ${RELOCATING+_etext = .};
+ }
+ data ${RELOCATING+0x80002000} :
+ {
+ *(.data);
+ *(.mstack);
+ *(.shbss);
+ *(.rstack);
+ *(.mstack);
+ ${CONSTRUCTING+CONSTRUCTORS}
+ }
+ .bss . :
+ {
+ *(COMMON)
+ *(.bss);
+ ${RELOCATING+_end = .};
+ }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elf.sc b/binutils-2.17/ld/scripttempl/elf.sc
new file mode 100644
index 00000000..ac0c7256
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elf.sc
@@ -0,0 +1,507 @@
+#
+# 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_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
+# 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.
+#
+# 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
+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
+INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
+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.*) }"
+STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }"
+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" && LARGE_SECTIONS="
+ .lbss ${RELOCATING-0} :
+ {
+ *(.dynlbss)
+ *(.lbss${RELOCATING+ .lbss.* .gnu.linkonce.lb.*})
+ *(LARGE_COMMON)
+ }
+ .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);}
+ }"
+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
+ 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})
+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;}}
+ ${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+* .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 <<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}
+
+ ${TEXT_PLT+${PLT}}
+ ${TINY_READONLY_SECTION}
+ .text ${RELOCATING-0} :
+ {
+ ${RELOCATING+${TEXT_START_SYMBOLS}}
+ *(.text .stub${RELOCATING+ .text.* .gnu.linkonce.t.*})
+ KEEP (*(.text.*personality*))
+ /* .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.*}) }
+ .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
+
+ .preinit_array ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
+ KEEP (*(.preinit_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
+ }
+ .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 ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
+ KEEP (*(.fini_array))
+ KEEP (*(SORT(.fini_array.*)))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
+ }
+ ${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.*})
+ KEEP (*(.gnu.linkonce.d.*personality*))
+ ${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-_edata = .; 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.
+ FIXME: Why do we need it? When there is no .bss section, we don't
+ pad the .data section. */
+ ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
+ }
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${LARGE_SECTIONS}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+${END_SYMBOLS-_end = .; 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) }
+ .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) }
+
+ ${TINY_DATA_SECTION}
+ ${TINY_BSS_SECTION}
+
+ ${STACK_ADDR+${STACK}}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+ ${RELOCATING+${STACKNOTE}}
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elf32cr16c.sc b/binutils-2.17/ld/scripttempl/elf32cr16c.sc
new file mode 100644
index 00000000..b02edfdc
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elf32cr16c.sc
@@ -0,0 +1,52 @@
+# 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. */
+
+/* Force the entry point to be entered in the output file as
+ an undefined symbol. This is needed in case the entry point
+ (which is not called explicitly) is in an archive (which is
+ the usual case). */
+
+EXTERN(${ENTRY})
+
+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 : { . = ALIGN(4); __HEAP_START = .; . += 0x2000; __HEAP_MAX = .; } > near_ram
+ .stack : { . = ALIGN(4); . += 0x6000; __STACK_START = .; } > ram
+ .istack : { . = ALIGN(2); . += 0x100; __ISTACK_START = .; } > ram
+}
+
+__DATA_IMAGE_START = LOADADDR(.data);
+__NDATA_IMAGE_START = LOADADDR(.ndata);
+
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elf32crx.sc b/binutils-2.17/ld/scripttempl/elf32crx.sc
new file mode 100644
index 00000000..63401fe7
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elf32crx.sc
@@ -0,0 +1,175 @@
+# 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. */
+
+/* The next line forces the entry point (${ENTRY} in this script)
+ to be entered in the output file as an undefined symbol.
+ It is needed in case the entry point is not called explicitly
+ (which is the usual case) AND is in an archive. */
+
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+EXTERN(${ENTRY})
+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 :
+ {
+ . = ALIGN(4);
+ __HEAP_START = .;
+ . += 0x2000; __HEAP_MAX = .;
+ } > ram
+
+ .stack :
+ {
+ . = ALIGN(4);
+ . += 0x6000;
+ __STACK_START = .;
+ } > ram
+
+ .istack :
+ {
+ . = 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) }
+ .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) }
+}
+
+__DATA_IMAGE_START = LOADADDR(.data);
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elf32msp430.sc b/binutils-2.17/ld/scripttempl/elf32msp430.sc
new file mode 100644
index 00000000..cbffe482
--- /dev/null
+++ b/binutils-2.17/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) }
+ .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) }
+
+ 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.17/ld/scripttempl/elf32msp430_3.sc b/binutils-2.17/ld/scripttempl/elf32msp430_3.sc
new file mode 100644
index 00000000..15eb5172
--- /dev/null
+++ b/binutils-2.17/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) }
+ .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) }
+
+ 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.17/ld/scripttempl/elf32sh-symbian.sc b/binutils-2.17/ld/scripttempl/elf32sh-symbian.sc
new file mode 100644
index 00000000..1bcac181
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elf32sh-symbian.sc
@@ -0,0 +1,380 @@
+#
+# 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)
+# 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=""
+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.*}) }"
+STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) *(.directive) }"
+test -z "$GOT" && GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) } :dynamic :dyn"
+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))
+
+ /* 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 $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 (*(EXCLUDE_FILE (*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})
+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 = .);}}
+ }
+ .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 ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
+ KEEP (*(.fini_array))
+ KEEP (*(SORT(.fini_array.*)))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
+ }
+
+ ${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) }
+ .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) }
+
+ ${STACK_ADDR+${STACK}}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+ ${RELOCATING+${STACKNOTE}}
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elf32xc16x.sc b/binutils-2.17/ld/scripttempl/elf32xc16x.sc
new file mode 100644
index 00000000..7ffdc387
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elf32xc16x.sc
@@ -0,0 +1,61 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+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.17/ld/scripttempl/elf32xc16xl.sc b/binutils-2.17/ld/scripttempl/elf32xc16xl.sc
new file mode 100644
index 00000000..215b50ae
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elf32xc16xl.sc
@@ -0,0 +1,64 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+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.17/ld/scripttempl/elf32xc16xs.sc b/binutils-2.17/ld/scripttempl/elf32xc16xs.sc
new file mode 100644
index 00000000..215b50ae
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elf32xc16xs.sc
@@ -0,0 +1,64 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+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.17/ld/scripttempl/elf_chaos.sc b/binutils-2.17/ld/scripttempl/elf_chaos.sc
new file mode 100644
index 00000000..167b7124
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elf_chaos.sc
@@ -0,0 +1,353 @@
+#
+# 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)
+# 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 "$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))
+
+ /* 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 $OTHER_EXCLUDE_FILES) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ ${CONSTRUCTING+${CTOR_END}}
+"
+DTOR="
+ ${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)
+ }"
+
+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})
+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) }
+ .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) }
+
+ ${STACK_ADDR+${STACK}}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elfd10v.sc b/binutils-2.17/ld/scripttempl/elfd10v.sc
new file mode 100644
index 00000000..6145fda4
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elfd10v.sc
@@ -0,0 +1,196 @@
+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))
+
+ /* 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))
+ ${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}}
+ }"
+
+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})
+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) }
+ .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) }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elfd30v.sc b/binutils-2.17/ld/scripttempl/elfd30v.sc
new file mode 100644
index 00000000..924414d5
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elfd30v.sc
@@ -0,0 +1,223 @@
+
+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))
+
+ /* 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))
+ ${CONSTRUCTING+ __CTOR_END__ = .; }
+ } ${RELOCATING+ > ${DATA_MEMORY}}"
+
+DTOR=" .dtors ${CONSTRUCTING-0} :
+ {
+ ${CONSTRUCTING+ __DTOR_LIST__ = .; }
+ KEEP (*crtbegin*.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*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) }
+ .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) }
+
+ PROVIDE (__stack = ${STACK_START_ADDR});
+}
+EOF
+
+
+
+
diff --git a/binutils-2.17/ld/scripttempl/elfi370.sc b/binutils-2.17/ld/scripttempl/elfi370.sc
new file mode 100644
index 00000000..6b390fe9
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elfi370.sc
@@ -0,0 +1,217 @@
+#
+# 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)
+# 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 "$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})
+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) }
+ .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) }
+
+ ${OTHER_SECTIONS}
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elfm68hc11.sc b/binutils-2.17/ld/scripttempl/elfm68hc11.sc
new file mode 100644
index 00000000..f4977f67
--- /dev/null
+++ b/binutils-2.17/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})
+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) }
+ .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) }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elfm68hc12.sc b/binutils-2.17/ld/scripttempl/elfm68hc12.sc
new file mode 100644
index 00000000..f2223430
--- /dev/null
+++ b/binutils-2.17/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})
+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) }
+ .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) }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/elfxtensa.sc b/binutils-2.17/ld/scripttempl/elfxtensa.sc
new file mode 100644
index 00000000..9c3aa1fe
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/elfxtensa.sc
@@ -0,0 +1,476 @@
+#
+# 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_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
+# 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.
+#
+# 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 -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
+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
+INTERP=".interp ${RELOCATING-0} : { *(.interp) }"
+if test -z "$PLT"; then
+ PLT=".plt ${RELOCATING-0} : { *(.plt) }"
+fi
+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) *(.data.rel.ro*) }"
+STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }"
+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} :
+ {
+ ${CREATE_SHLIB+*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)}
+ *(.dynsbss)
+ *(.sbss${RELOCATING+ .sbss.* .gnu.linkonce.sb.*})
+ *(.scommon)
+ }"
+ 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
+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=" "
+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
+ 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
+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}
+
+ ${RELOCATING-$INIT_LIT}
+ ${RELOCATING-$INIT}
+
+ ${DATA_PLT-${BSS_PLT-${PLT}}}
+ .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+ .text.* .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*})
+ KEEP (*(.text.*personality*))
+ /* .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 { 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} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
+ KEEP (*(.preinit_array))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
+ }
+ .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 ${RELOCATING-0} :
+ {
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
+ KEEP (*(.fini_array))
+ KEEP (*(SORT(.fini_array.*)))
+ ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
+ }
+
+ ${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.*})
+ KEEP (*(.gnu.linkonce.d.*personality*))
+ ${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-_edata = .; 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});}
+ }
+ ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
+ ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ ${RELOCATING+${OTHER_END_SYMBOLS}}
+ ${RELOCATING+_end = .;}
+ ${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) }
+ .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) }
+
+ ${STACK_ADDR+${STACK}}
+ ${OTHER_SECTIONS}
+ ${RELOCATING+${OTHER_SYMBOLS}}
+ ${RELOCATING+${STACKNOTE}}
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/epocpe.sc b/binutils-2.17/ld/scripttempl/epocpe.sc
new file mode 100644
index 00000000..eda6696b
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/epocpe.sc
@@ -0,0 +1,151 @@
+# 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}
+
+ENTRY(_mainCRTStartup)
+
+SECTIONS
+{
+ .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
+ {
+ ${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 = .;}
+ *(.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.17/ld/scripttempl/h8300.sc b/binutils-2.17/ld/scripttempl/h8300.sc
new file mode 100644
index 00000000..1fdf30c8
--- /dev/null
+++ b/binutils-2.17/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})
+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.17/ld/scripttempl/h8300h.sc b/binutils-2.17/ld/scripttempl/h8300h.sc
new file mode 100644
index 00000000..c2bc2e14
--- /dev/null
+++ b/binutils-2.17/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)
+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.17/ld/scripttempl/h8300hn.sc b/binutils-2.17/ld/scripttempl/h8300hn.sc
new file mode 100644
index 00000000..e2c29544
--- /dev/null
+++ b/binutils-2.17/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)
+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.17/ld/scripttempl/h8300s.sc b/binutils-2.17/ld/scripttempl/h8300s.sc
new file mode 100644
index 00000000..53c9dec1
--- /dev/null
+++ b/binutils-2.17/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)
+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.17/ld/scripttempl/h8300sn.sc b/binutils-2.17/ld/scripttempl/h8300sn.sc
new file mode 100644
index 00000000..b2647ca4
--- /dev/null
+++ b/binutils-2.17/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)
+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.17/ld/scripttempl/h8300sx.sc b/binutils-2.17/ld/scripttempl/h8300sx.sc
new file mode 100644
index 00000000..d3807c0d
--- /dev/null
+++ b/binutils-2.17/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)
+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.17/ld/scripttempl/h8300sxn.sc b/binutils-2.17/ld/scripttempl/h8300sxn.sc
new file mode 100644
index 00000000..0b1bcf11
--- /dev/null
+++ b/binutils-2.17/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)
+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.17/ld/scripttempl/h8500.sc b/binutils-2.17/ld/scripttempl/h8500.sc
new file mode 100644
index 00000000..6b889ddc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/h8500b.sc b/binutils-2.17/ld/scripttempl/h8500b.sc
new file mode 100644
index 00000000..fb6c0e86
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/h8500c.sc b/binutils-2.17/ld/scripttempl/h8500c.sc
new file mode 100644
index 00000000..145ffc5c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/h8500m.sc b/binutils-2.17/ld/scripttempl/h8500m.sc
new file mode 100644
index 00000000..3314066e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/h8500s.sc b/binutils-2.17/ld/scripttempl/h8500s.sc
new file mode 100644
index 00000000..da4d2101
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/hppaelf.sc b/binutils-2.17/ld/scripttempl/hppaelf.sc
new file mode 100644
index 00000000..941ce089
--- /dev/null
+++ b/binutils-2.17/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})
+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.17/ld/scripttempl/i386beos.sc b/binutils-2.17/ld/scripttempl/i386beos.sc
new file mode 100644
index 00000000..21a01e56
--- /dev/null
+++ b/binutils-2.17/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}
+
+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.17/ld/scripttempl/i386coff.sc b/binutils-2.17/ld/scripttempl/i386coff.sc
new file mode 100644
index 00000000..fbb1b791
--- /dev/null
+++ b/binutils-2.17/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}
+
+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.17/ld/scripttempl/i386go32.sc b/binutils-2.17/ld/scripttempl/i386go32.sc
new file mode 100644
index 00000000..54908fe1
--- /dev/null
+++ b/binutils-2.17/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}")
+
+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.17/ld/scripttempl/i386msdos.sc b/binutils-2.17/ld/scripttempl/i386msdos.sc
new file mode 100644
index 00000000..4d312e7f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/i860coff.sc b/binutils-2.17/ld/scripttempl/i860coff.sc
new file mode 100644
index 00000000..f268c6f9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/i960.sc b/binutils-2.17/ld/scripttempl/i960.sc
new file mode 100644
index 00000000..dc335555
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/ip2k.sc b/binutils-2.17/ld/scripttempl/ip2k.sc
new file mode 100644
index 00000000..d7826caf
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/ip2k.sc
@@ -0,0 +1,150 @@
+cat << EOF
+OUTPUT_FORMAT("elf32-ip2k", "elf32-ip2k", "elf32-ip2k")
+OUTPUT_ARCH(ip2k)
+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) }
+ .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) }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/iq2000.sc b/binutils-2.17/ld/scripttempl/iq2000.sc
new file mode 100644
index 00000000..b0872643
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/iq2000.sc
@@ -0,0 +1,442 @@
+#
+# 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))
+
+ /* 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 $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}}
+ }"
+
+# 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})
+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) }
+ .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) }
+
+ ${RELOCATING+${OTHER_RELOCATING_SECTIONS}}
+
+ /* These must appear regardless of ${RELOCATING}. */
+ ${OTHER_SECTIONS}
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/m68kaux.sc b/binutils-2.17/ld/scripttempl/m68kaux.sc
new file mode 100644
index 00000000..404280e1
--- /dev/null
+++ b/binutils-2.17/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}
+
+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.17/ld/scripttempl/m68kcoff.sc b/binutils-2.17/ld/scripttempl/m68kcoff.sc
new file mode 100644
index 00000000..f268c6f9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/m68klynx.sc b/binutils-2.17/ld/scripttempl/m68klynx.sc
new file mode 100644
index 00000000..81d22458
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/m68klynx.sc
@@ -0,0 +1,46 @@
+test -z "$ENTRY" && ENTRY=_start
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+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 .data2)
+ ${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.17/ld/scripttempl/m88kbcs.sc b/binutils-2.17/ld/scripttempl/m88kbcs.sc
new file mode 100644
index 00000000..f52b14dc
--- /dev/null
+++ b/binutils-2.17/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})
+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.17/ld/scripttempl/maxqcoff.sc b/binutils-2.17/ld/scripttempl/maxqcoff.sc
new file mode 100644
index 00000000..2e093048
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/maxqcoff.sc
@@ -0,0 +1,43 @@
+test -z "$ENTRY" && ENTRY=_main
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+ENTRY(${ENTRY})
+MEMORY
+ {
+ rom (rx) : ORIGIN = 0, LENGTH = 0x7FFE
+ ram (!rx) : org = 0x0A000, l = 0x5FFF
+ }
+
+SECTIONS
+{
+ .text ${RELOCATING+ 0x0000}:
+ {
+ *(.text)
+ } >rom
+
+ .data ${RELOCATING}:
+ {
+ *(.data)
+ *(.rodata)
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+ edata = .};
+ }>ram
+
+/* .bss ${RELOCATING+ SIZEOF(.data) + 0x0000} :
+ {
+ *(.bss)
+ *(COMMON)
+ }
+*/
+ .stab 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stab ]
+ }
+ .stabstr 0 ${RELOCATING+(NOLOAD)} :
+ {
+ [ .stabstr ]
+ }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/mcorepe.sc b/binutils-2.17/ld/scripttempl/mcorepe.sc
new file mode 100644
index 00000000..6f928aad
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/mcorepe.sc
@@ -0,0 +1,162 @@
+# 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}
+
+ENTRY(_mainCRTStartup)
+
+SECTIONS
+{
+ .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
+ {
+ ${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 = .;}
+ *(.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.17/ld/scripttempl/mips.sc b/binutils-2.17/ld/scripttempl/mips.sc
new file mode 100644
index 00000000..972351f7
--- /dev/null
+++ b/binutils-2.17/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}
+
+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.17/ld/scripttempl/mipsbsd.sc b/binutils-2.17/ld/scripttempl/mipsbsd.sc
new file mode 100644
index 00000000..b222b335
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/mmo.sc b/binutils-2.17/ld/scripttempl/mmo.sc
new file mode 100644
index 00000000..643b3495
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/mmo.sc
@@ -0,0 +1,131 @@
+cat <<EOF
+OUTPUT_FORMAT("mmo")
+OUTPUT_ARCH(mmix)
+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 (*(EXCLUDE_FILE (*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 (*(EXCLUDE_FILE (*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) }
+ .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) }
+ .debug_ranges 0 : { *(.debug_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/ :
+ { *(.gnu.warning.*); }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/nw.sc b/binutils-2.17/ld/scripttempl/nw.sc
new file mode 100644
index 00000000..3fb9bce1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/or32.sc b/binutils-2.17/ld/scripttempl/or32.sc
new file mode 100644
index 00000000..2825b1e8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/pe.sc b/binutils-2.17/ld/scripttempl/pe.sc
new file mode 100644
index 00000000..c9931b51
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/pe.sc
@@ -0,0 +1,272 @@
+# 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_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=
+ R_IDATA=
+ 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}
+ *(.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 = .);}
+ *(.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__)} :
+ {
+ *(.rdata)
+ ${R_RDATA}
+ *(.eh_frame)
+ ${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__ = .;}
+ }
+
+ .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)
+ }
+
+ .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__)} :
+ {
+ ${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)
+ }
+
+ /* 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)
+ }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/pj.sc b/binutils-2.17/ld/scripttempl/pj.sc
new file mode 100644
index 00000000..93981a59
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/ppcpe.sc b/binutils-2.17/ld/scripttempl/ppcpe.sc
new file mode 100644
index 00000000..40fbe33b
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/ppcpe.sc
@@ -0,0 +1,198 @@
+# 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.
+*/
+
+ENTRY(mainCRTStartup)
+
+SECTIONS
+{
+
+ /* text - the usual meaning */
+ .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
+ {
+ ${RELOCATING+ *(.init);}
+ *(.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.17/ld/scripttempl/psos.sc b/binutils-2.17/ld/scripttempl/psos.sc
new file mode 100644
index 00000000..ab8c6c7e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/riscix.sc b/binutils-2.17/ld/scripttempl/riscix.sc
new file mode 100644
index 00000000..c801a0c4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/sa29200.sc b/binutils-2.17/ld/scripttempl/sa29200.sc
new file mode 100644
index 00000000..a2f267e6
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/sa29200.sc
@@ -0,0 +1,44 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+ENTRY(start)
+
+SECTIONS {
+ .text ${RELOCATING+${TEXT_START_ADDR}} :
+ {
+ *(.text);
+ *(.text1);
+ *(.text2);
+ ${RELOCATING+_etext = .};
+ }
+ .lit ALIGN(4) :
+ {
+ *(.lit);
+ ${RELOCATING+_elit = .};
+ }
+ .data ALIGN(4) :
+ {
+ *(.data);
+ *(.data1);
+ *(.data2);
+ ${RELOCATING+_edata = .};
+ ${CONSTRUCTING+CONSTRUCTORS}
+ ${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__ = .;}
+ }
+
+ .bss ALIGN(4) :
+ {
+ *(COMMON)
+ *(.bss)
+ ${RELOCATING+_end = .};
+ }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/sh.sc b/binutils-2.17/ld/scripttempl/sh.sc
new file mode 100644
index 00000000..e7f049fb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/sparccoff.sc b/binutils-2.17/ld/scripttempl/sparccoff.sc
new file mode 100644
index 00000000..6bbb7ad6
--- /dev/null
+++ b/binutils-2.17/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}
+
+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.17/ld/scripttempl/sparclynx.sc b/binutils-2.17/ld/scripttempl/sparclynx.sc
new file mode 100644
index 00000000..c2b1e1d3
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/sparclynx.sc
@@ -0,0 +1,47 @@
+# Linker script for Sparc LynxOS.
+test -z "$ENTRY" && ENTRY=_start
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+${LIB_SEARCH_DIRS}
+
+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.17/ld/scripttempl/st2000.sc b/binutils-2.17/ld/scripttempl/st2000.sc
new file mode 100644
index 00000000..7ee132a8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/tic30aout.sc b/binutils-2.17/ld/scripttempl/tic30aout.sc
new file mode 100644
index 00000000..28baed37
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/tic30coff.sc b/binutils-2.17/ld/scripttempl/tic30coff.sc
new file mode 100644
index 00000000..df2d4f73
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/tic4xcoff.sc b/binutils-2.17/ld/scripttempl/tic4xcoff.sc
new file mode 100644
index 00000000..121f3ed4
--- /dev/null
+++ b/binutils-2.17/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}
+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.17/ld/scripttempl/tic54xcoff.sc b/binutils-2.17/ld/scripttempl/tic54xcoff.sc
new file mode 100644
index 00000000..8d8a8116
--- /dev/null
+++ b/binutils-2.17/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
+}
+
+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.17/ld/scripttempl/tic80coff.sc b/binutils-2.17/ld/scripttempl/tic80coff.sc
new file mode 100644
index 00000000..2b6f6534
--- /dev/null
+++ b/binutils-2.17/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}
+
+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.17/ld/scripttempl/v850.sc b/binutils-2.17/ld/scripttempl/v850.sc
new file mode 100644
index 00000000..18ba03a2
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/v850.sc
@@ -0,0 +1,231 @@
+cat << EOF
+OUTPUT_FORMAT("elf32-v850", "elf32-v850",
+ "elf32-v850")
+OUTPUT_ARCH(v850)
+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) }
+ .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) }
+
+ /* User stack. */
+ .stack 0x200000 :
+ {
+ ${RELOCATING+__stack = .;}
+ *(.stack)
+ }
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/vanilla.sc b/binutils-2.17/ld/scripttempl/vanilla.sc
new file mode 100644
index 00000000..1798480e
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/vanilla.sc
@@ -0,0 +1 @@
+# Nothing to do.
diff --git a/binutils-2.17/ld/scripttempl/w65.sc b/binutils-2.17/ld/scripttempl/w65.sc
new file mode 100644
index 00000000..f92d9994
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/xstormy16.sc b/binutils-2.17/ld/scripttempl/xstormy16.sc
new file mode 100644
index 00000000..dd7c52cb
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/xstormy16.sc
@@ -0,0 +1,239 @@
+#
+# 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))
+
+ /* 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 $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 (*(EXCLUDE_FILE (*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})
+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) } ${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) }
+ .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) }
+
+ ${RELOCATING+${OTHER_RELOCATING_SECTIONS}}
+
+ /* These must appear regardless of ${RELOCATING}. */
+ ${OTHER_SECTIONS}
+}
+EOF
diff --git a/binutils-2.17/ld/scripttempl/z80.sc b/binutils-2.17/ld/scripttempl/z80.sc
new file mode 100644
index 00000000..8c004da8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/scripttempl/z8000.sc b/binutils-2.17/ld/scripttempl/z8000.sc
new file mode 100644
index 00000000..646c8808
--- /dev/null
+++ b/binutils-2.17/ld/scripttempl/z8000.sc
@@ -0,0 +1,57 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH("${OUTPUT_ARCH}")
+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.17/ld/stamp-h.in b/binutils-2.17/ld/stamp-h.in
new file mode 100644
index 00000000..9788f702
--- /dev/null
+++ b/binutils-2.17/ld/stamp-h.in
@@ -0,0 +1 @@
+timestamp
diff --git a/binutils-2.17/ld/sysdep.h b/binutils-2.17/ld/sysdep.h
new file mode 100644
index 00000000..4c5e9945
--- /dev/null
+++ b/binutils-2.17/ld/sysdep.h
@@ -0,0 +1,96 @@
+/* sysdep.h -- handle host dependencies for the GNU linker
+ Copyright 1995, 1996, 1997, 1999, 2002, 2003
+ Free Software Foundation, Inc.
+
+ This file is part of GLD, the Gnu Linker.
+
+ GLD 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.
+
+ GLD 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 LD_SYSDEP_H
+#define LD_SYSDEP_H
+
+#include "config.h"
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.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 USE_BINARY_FOPEN
+#include "fopen-bin.h"
+#else
+#include "fopen-same.h"
+#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.17/ld/testsuite/ChangeLog b/binutils-2.17/ld/testsuite/ChangeLog
new file mode 100644
index 00000000..5f30043a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ChangeLog
@@ -0,0 +1,370 @@
+2006-06-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ Backport:
+ 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-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-01 Daniel Jacobowitz <dan@codesourcery.com>
+
+ Backport:
+ 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 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-17 Daniel Jacobowitz <dan@codesourcery.com>
+
+ Backport:
+ 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-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-10 Thiemo Seufer <ths@debian.org>
+
+ * ld-elf/sec64k.exp: Extend for MIPS ELF.
+
+2006-05-10 Alan Modra <amodra@bigpond.net.au>
+
+ * ld-powerpc/tlsexetoc.r: Update for correction to tls optimization.
+ * ld-powerpc/tlsexetoc.g: 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-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.17/ld/testsuite/ChangeLog-2004 b/binutils-2.17/ld/testsuite/ChangeLog-2004
new file mode 100644
index 00000000..cc63b7e7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ChangeLog-2005 b/binutils-2.17/ld/testsuite/ChangeLog-2005
new file mode 100644
index 00000000..23efd89c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ChangeLog-9303 b/binutils-2.17/ld/testsuite/ChangeLog-9303
new file mode 100644
index 00000000..895eb03f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/config/default.exp b/binutils-2.17/ld/testsuite/config/default.exp
new file mode 100644
index 00000000..d268fd96
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/config/default.exp
@@ -0,0 +1,269 @@
+# Basic expect script for LD Regression Tests
+# Copyright 1993, 1994, 1995, 1997, 1998, 1999, 2001, 2003
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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]]
+}
+
+if {![file isdirectory tmpdir]} then {
+ catch "exec mkdir tmpdir" status
+}
+
+# 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] {
+ set status [catch "exec sh -c \"host='$target_triplet' && CC='$CC' && . $srcdir/../configure.host && eval echo \\$$varname\"" result]
+ if $status { error "Error getting native link files: $result" }
+ set $varname $result
+ }
+}
+
+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.17/ld/testsuite/ld-alpha/align.s b/binutils-2.17/ld/testsuite/ld-alpha/align.s
new file mode 100644
index 00000000..6c48ba9e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/alpha.exp b/binutils-2.17/ld/testsuite/ld-alpha/alpha.exp
new file mode 100644
index 00000000..cc628d22
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-alpha/alpha.exp
@@ -0,0 +1,61 @@
+# Expect script for ld-alpha tests
+# Copyright (C) 2003 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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.17/ld/testsuite/ld-alpha/tlsbin.dd b/binutils-2.17/ld/testsuite/ld-alpha/tlsbin.dd
new file mode 100644
index 00000000..674ec375
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlsbin.rd b/binutils-2.17/ld/testsuite/ld-alpha/tlsbin.rd
new file mode 100644
index 00000000..8a5a78ab
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-alpha/tlsbin.rd
@@ -0,0 +1,136 @@
+#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\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ \[ 1] .interp +.*
+ \[ 2\] .hash +.*
+ \[ 3\] .dynsym +.*
+ \[ 4\] .dynstr +.*
+ \[ 5\] .rela.dyn +.*
+ \[ 6\] .rela.plt +.*
+ \[ 7\] .text +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +AX +0 +0 4096
+ \[ 8\] .eh_frame +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +8
+ \[ 9\] .tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 WAT +0 +0 +4
+ \[10\] .tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 WAT +0 +0 +1
+ \[11\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 10 +WA +4 +0 +8
+ \[12\] .plt +.*
+ \[13\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +WA +0 +0 +8
+ \[14\] .shstrtab +.*
+ \[15\] .symtab +.*
+ \[16\] .strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x[0-9a-f]+
+There are 6 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]+ +4 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 SECTION LOCAL +DEFAULT +14
+[0-9 ]+: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +15
+[0-9 ]+: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +16
+[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 +HIDDEN +11 _DYNAMIC
+[0-9 ]+: [0-9a-f]+ +0 OBJECT +LOCAL +HIDDEN +12 _PROCEDURE_LINKAGE_TABLE_
+[0-9 ]+: [0-9a-f]+ +0 OBJECT +LOCAL +HIDDEN +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]+ +4 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 +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.17/ld/testsuite/ld-alpha/tlsbin.s b/binutils-2.17/ld/testsuite/ld-alpha/tlsbin.s
new file mode 100644
index 00000000..a772a7ef
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlsbin.sd b/binutils-2.17/ld/testsuite/ld-alpha/tlsbin.sd
new file mode 100644
index 00000000..1bf0278b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlsbin.td b/binutils-2.17/ld/testsuite/ld-alpha/tlsbin.td
new file mode 100644
index 00000000..8bd7a6ce
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlsbinpic.s b/binutils-2.17/ld/testsuite/ld-alpha/tlsbinpic.s
new file mode 100644
index 00000000..7a94eb1a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlsbinr.dd b/binutils-2.17/ld/testsuite/ld-alpha/tlsbinr.dd
new file mode 100644
index 00000000..16d024dc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlsbinr.rd b/binutils-2.17/ld/testsuite/ld-alpha/tlsbinr.rd
new file mode 100644
index 00000000..8497075a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-alpha/tlsbinr.rd
@@ -0,0 +1,131 @@
+#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\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[ 1\] \.interp +.*
+ +\[ 2\] \.hash +.*
+ +\[ 3\] \.dynsym +.*
+ +\[ 4\] \.dynstr +.*
+ +\[ 5\] \.rela\.dyn +.*
+ +\[ 6\] \.rela\.plt +.*
+ +\[ 7\] \.text +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ +AX +0 +0 4096
+ +\[ 8\] \.eh_frame +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +8
+ +\[ 9\] \.tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +4
+ +\[10\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +1
+ +\[11\] \.dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 10 +WA +4 +0 +8
+ +\[12\] \.plt +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAX +0 +0 +16
+ +\[13\] \.got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ +WA +0 +0 +8
+ +\[14\] \.shstrtab +.*
+ +\[15\] \.symtab +.*
+ +\[16\] \.strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x[0-9a-f]+
+There are 6 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+ +4 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 SECTION LOCAL +DEFAULT +14
+[0-9 ]+: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +15
+[0-9 ]+: [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +16
+[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 +HIDDEN +11 _DYNAMIC
+[0-9 ]+: [0-9a-f]+ +0 OBJECT +LOCAL +HIDDEN +12 _PROCEDURE_LINKAGE_TABLE_
+[0-9 ]+: [0-9a-f]+ +0 OBJECT +LOCAL +HIDDEN +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]+ +4 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 +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.17/ld/testsuite/ld-alpha/tlsbinr.sd b/binutils-2.17/ld/testsuite/ld-alpha/tlsbinr.sd
new file mode 100644
index 00000000..59e9449d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlsg.s b/binutils-2.17/ld/testsuite/ld-alpha/tlsg.s
new file mode 100644
index 00000000..99fb84a5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlsg.sd b/binutils-2.17/ld/testsuite/ld-alpha/tlsg.sd
new file mode 100644
index 00000000..c426a991
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlslib.s b/binutils-2.17/ld/testsuite/ld-alpha/tlslib.s
new file mode 100644
index 00000000..88cdff2a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlspic.dd b/binutils-2.17/ld/testsuite/ld-alpha/tlspic.dd
new file mode 100644
index 00000000..63f150cd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlspic.rd b/binutils-2.17/ld/testsuite/ld-alpha/tlspic.rd
new file mode 100644
index 00000000..04b2e0fe
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-alpha/tlspic.rd
@@ -0,0 +1,135 @@
+#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\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[ 1\] .hash +.*
+ +\[ 2\] .dynsym +.*
+ +\[ 3\] .dynstr +.*
+ +\[ 4\] .rela.dyn +.*
+ +\[ 5\] .rela.plt +.*
+ +\[ 6\] .text +PROGBITS +0+1000 0+1000 0+ac 0+ +AX +0 +0 4096
+ +\[ 7\] .eh_frame +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 00 +A +0 +0 +8
+ +\[ 8\] .tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +4
+ +\[ 9\] .tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ WAT +0 +0 +1
+ +\[10\] .dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 10 +WA +3 +0 +8
+ +\[11\] .plt +.*
+ +\[12\] .got +PROGBITS +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 0+ +WA +0 +0 +8
+ +\[13\] .shstrtab +.*
+ +\[14\] .symtab +.*
+ +\[15\] .strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are 4 program headers, starting at offset [0-9a-f]+
+
+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 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 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 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 SECTION LOCAL +DEFAULT +13
+.* [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +14
+.* [0-9a-f]+ +0 SECTION LOCAL +DEFAULT +15
+.* [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 +HIDDEN +9 sH1
+.* [0-9a-f]+ +0 OBJECT +LOCAL +HIDDEN +ABS _DYNAMIC
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +8 sh3
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +9 sH2
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +9 sH7
+.* [0-9a-f]+ +0 OBJECT +LOCAL +HIDDEN +ABS _PROCEDURE_LINKAGE_TABLE_
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +8 sh7
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +8 sh8
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +9 sH4
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +8 sh4
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +9 sH3
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +8 sh5
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +9 sH5
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +9 sH6
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +9 sH8
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +8 sh1
+.* [0-9a-f]+ +0 OBJECT +LOCAL +HIDDEN +ABS _GLOBAL_OFFSET_TABLE_
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +8 sh2
+.* [0-9a-f]+ +0 TLS +LOCAL +HIDDEN +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 +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.17/ld/testsuite/ld-alpha/tlspic.sd b/binutils-2.17/ld/testsuite/ld-alpha/tlspic.sd
new file mode 100644
index 00000000..772cbafe
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlspic.td b/binutils-2.17/ld/testsuite/ld-alpha/tlspic.td
new file mode 100644
index 00000000..cd09609e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlspic1.s b/binutils-2.17/ld/testsuite/ld-alpha/tlspic1.s
new file mode 100644
index 00000000..822f36d6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-alpha/tlspic2.s b/binutils-2.17/ld/testsuite/ld-alpha/tlspic2.s
new file mode 100644
index 00000000..5513f9b5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-app-abs32.d b/binutils-2.17/ld/testsuite/ld-arm/arm-app-abs32.d
new file mode 100644
index 00000000..9a4da22b
--- /dev/null
+++ b/binutils-2.17/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 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 stmdb sp!, {fp, ip, lr, pc}
+ .*: e59f0004 ldr r0, \[pc, #4\] ; .* <.text\+0x14>
+ .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+ .*: .* .*
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-app-abs32.r b/binutils-2.17/ld/testsuite/ld-arm/arm-app-abs32.r
new file mode 100644
index 00000000..08d668c2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-app-abs32.s b/binutils-2.17/ld/testsuite/ld-arm/arm-app-abs32.s
new file mode 100644
index 00000000..a1cf5269
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-app.d b/binutils-2.17/ld/testsuite/ld-arm/arm-app.d
new file mode 100644
index 00000000..207961ea
--- /dev/null
+++ b/binutils-2.17/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 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, #.* ; 0x.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: eb000001 bl .* <app_func>
+ .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <app_func>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: ebfffff4 bl .* <_start-0xc>
+ .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-app.r b/binutils-2.17/ld/testsuite/ld-arm/arm-app.r
new file mode 100644
index 00000000..a2493928
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-app.s b/binutils-2.17/ld/testsuite/ld-arm/arm-app.s
new file mode 100644
index 00000000..8f6d27c3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-call.d b/binutils-2.17/ld/testsuite/ld-arm/arm-call.d
new file mode 100644
index 00000000..fd4cd135
--- /dev/null
+++ b/binutils-2.17/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: ea00000f b 805c <__t1_from_arm>
+ 801c: ea000011 b 8068 <__t2_from_arm>
+ 8020: 1b00000d blne 805c <__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>
+
+0000805c <__t1_from_arm>:
+ 805c: e59fc000 ldr ip, \[pc, #0\] ; 8064 <__t1_from_arm\+0x8>
+ 8060: e12fff1c bx ip
+ 8064: 00008041 andeq r8, r0, r1, asr #32
+
+00008068 <__t2_from_arm>:
+ 8068: e59fc000 ldr ip, \[pc, #0\] ; 8070 <__t2_from_arm\+0x8>
+ 806c: e12fff1c bx ip
+ 8070: 00008043 andeq r8, r0, r3, asr #32
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-call1.s b/binutils-2.17/ld/testsuite/ld-arm/arm-call1.s
new file mode 100644
index 00000000..e6ea1f2e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-call2.s b/binutils-2.17/ld/testsuite/ld-arm/arm-call2.s
new file mode 100644
index 00000000..30ae3495
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-dyn.ld b/binutils-2.17/ld/testsuite/ld-arm/arm-dyn.ld
new file mode 100644
index 00000000..96bc10c0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/arm-dyn.ld
@@ -0,0 +1,199 @@
+/* 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.*) }
+ __exidx_start = .;
+ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+ __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) }
+ .stack 0x80000 :
+ {
+ _stack = .;
+ *(.stack)
+ }
+ .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+ /DISCARD/ : { *(.note.GNU-stack) }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-elf.exp b/binutils-2.17/ld/testsuite/ld-arm/arm-elf.exp
new file mode 100644
index 00000000..1a9fc00a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/arm-elf.exp
@@ -0,0 +1,127 @@
+# Expect script for various ARM ELF tests.
+# Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+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}}
+ "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"
+}
+
+# Exclude non-ARM-ELF targets.
+
+if { ![is_elf_format] || ![istarget "arm*-*-*"] } {
+ 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 armelftests {
+ {"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"}
+ {"Mixed ARM/Thumb shared library" "-shared -T arm-lib.ld" ""
+ {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"}
+}
+
+run_ld_link_tests $armelftests
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-lib-plt32.d b/binutils-2.17/ld/testsuite/ld-arm/arm-lib-plt32.d
new file mode 100644
index 00000000..58206f43
--- /dev/null
+++ b/binutils-2.17/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 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, #.* ; 0x.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!
+Disassembly of section .text:
+
+.* <lib_func1>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: ebfffff9 bl .* <lib_func1-0xc>
+ .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <lib_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-lib-plt32.r b/binutils-2.17/ld/testsuite/ld-arm/arm-lib-plt32.r
new file mode 100644
index 00000000..35155397
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-lib-plt32.s b/binutils-2.17/ld/testsuite/ld-arm/arm-lib-plt32.s
new file mode 100644
index 00000000..d6c4787a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-lib.d b/binutils-2.17/ld/testsuite/ld-arm/arm-lib.d
new file mode 100644
index 00000000..e3257c95
--- /dev/null
+++ b/binutils-2.17/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 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, #.* ; 0x.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!
+Disassembly of section .text:
+
+.* <lib_func1>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: ebfffff9 bl .* <lib_func1-0xc>
+ .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <lib_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-lib.ld b/binutils-2.17/ld/testsuite/ld-arm/arm-lib.ld
new file mode 100644
index 00000000..0415d20d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/arm-lib.ld
@@ -0,0 +1,192 @@
+/* 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.*) }
+ __exidx_start = .;
+ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+ __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) }
+ .stack 0x80000 :
+ {
+ _stack = .;
+ *(.stack)
+ }
+ .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+ /DISCARD/ : { *(.note.GNU-stack) }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-lib.r b/binutils-2.17/ld/testsuite/ld-arm/arm-lib.r
new file mode 100644
index 00000000..a7dde474
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-lib.s b/binutils-2.17/ld/testsuite/ld-arm/arm-lib.s
new file mode 100644
index 00000000..949f61c0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-rel31.d b/binutils-2.17/ld/testsuite/ld-arm/arm-rel31.d
new file mode 100644
index 00000000..ac99e925
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-rel31.s b/binutils-2.17/ld/testsuite/ld-arm/arm-rel31.s
new file mode 100644
index 00000000..37eee66c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-static-app.d b/binutils-2.17/ld/testsuite/ld-arm/arm-static-app.d
new file mode 100644
index 00000000..9a3309d6
--- /dev/null
+++ b/binutils-2.17/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 stmdb sp!, {fp, ip, lr, pc}
+ .*: eb000001 bl .* <app_func>
+ .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <app_func>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: eb000001 bl .* <app_func2>
+ .*: e89d6800 ldmia sp, {fp, sp, lr}
+ .*: e12fff1e bx lr
+
+.* <app_func2>:
+ .*: e12fff1e bx lr
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-static-app.r b/binutils-2.17/ld/testsuite/ld-arm/arm-static-app.r
new file mode 100644
index 00000000..6034b7f8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-static-app.s b/binutils-2.17/ld/testsuite/ld-arm/arm-static-app.s
new file mode 100644
index 00000000..99c579f0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-target1-abs.d b/binutils-2.17/ld/testsuite/ld-arm/arm-target1-abs.d
new file mode 100644
index 00000000..af64e60a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-target1-rel.d b/binutils-2.17/ld/testsuite/ld-arm/arm-target1-rel.d
new file mode 100644
index 00000000..fcd6c1a3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-target1.s b/binutils-2.17/ld/testsuite/ld-arm/arm-target1.s
new file mode 100644
index 00000000..5a7ba914
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/arm-target2-abs.d b/binutils-2.17/ld/testsuite/ld-arm/arm-target2-abs.d
new file mode 100644
index 00000000..af64e60a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/arm-target2-abs.d
@@ -0,0 +1,7 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 (04800000|00008004) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-target2-got-rel.d b/binutils-2.17/ld/testsuite/ld-arm/arm-target2-got-rel.d
new file mode 100644
index 00000000..1a996f0c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/arm-target2-got-rel.d
@@ -0,0 +1,9 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 (00100000|00001000) .*
+Contents of section .got:
+ 9000 (04800000|00008004) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-target2-rel.d b/binutils-2.17/ld/testsuite/ld-arm/arm-target2-rel.d
new file mode 100644
index 00000000..569d6b59
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/arm-target2-rel.d
@@ -0,0 +1,7 @@
+
+.*: file format.*
+
+Contents of section .text:
+ 8000 (04000000|00000004) .*
+# Ignore .ARM.attributes section
+#...
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm-target2.s b/binutils-2.17/ld/testsuite/ld-arm/arm-target2.s
new file mode 100644
index 00000000..0c343ef6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/arm-target2.s
@@ -0,0 +1,6 @@
+# Test the R_ARM_TARGET2 relocation
+ .text
+ .global _start
+_start:
+ .word foo(target2)
+foo:
diff --git a/binutils-2.17/ld/testsuite/ld-arm/arm.ld b/binutils-2.17/ld/testsuite/ld-arm/arm.ld
new file mode 100644
index 00000000..4ef7d824
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/arm.ld
@@ -0,0 +1,18 @@
+/* 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)
+ *(.glue_7)
+ } =0
+ . = 0x9000;
+ .got : { *(.got) *(.got.plt)}
+ .ARM.attribues 0 : { *(.ARM.atttributes) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-arm/mixed-app-v5.d b/binutils-2.17/ld/testsuite/ld-arm/mixed-app-v5.d
new file mode 100644
index 00000000..9e8d4dd1
--- /dev/null
+++ b/binutils-2.17/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 str lr, \[sp, #-4\]!
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x20>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: e28fc6.* add ip, pc, #.* ; 0x.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!
+ .*: e28fc6.* add ip, pc, #.* ; 0x.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: eb000004 bl .* <app_func>
+ .*: e89d6800 ldmia 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 stmdb sp!, {fp, ip, lr, pc}
+ .*: ebfffff. bl .*
+ .*: e89d6800 ldmia 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.17/ld/testsuite/ld-arm/mixed-app.d b/binutils-2.17/ld/testsuite/ld-arm/mixed-app.d
new file mode 100644
index 00000000..38122272
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/mixed-app.d
@@ -0,0 +1,57 @@
+
+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 str lr, \[sp, #-4\]!
+ .*: e59fe004 ldr lr, \[pc, #4\] ; .* <_start-0x20>
+ .*: e08fe00e add lr, pc, lr
+ .*: e5bef008 ldr pc, \[lr, #8\]!
+ .*: .*
+ .*: (46c04778 undefined|477846c0 ldrmib r4, \[r8, -r0, asr #13\]!)
+ .*: e28fc6.* add ip, pc, #.* ; 0x.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!
+ .*: e28fc6.* add ip, pc, #.* ; 0x.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!
+Disassembly of section .text:
+
+.* <_start>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: eb000004 bl .* <app_func>
+ .*: e89d6800 ldmia 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 stmdb sp!, {fp, ip, lr, pc}
+ .*: ebfffff. bl .*
+ .*: e89d6800 ldmia 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.17/ld/testsuite/ld-arm/mixed-app.r b/binutils-2.17/ld/testsuite/ld-arm/mixed-app.r
new file mode 100644
index 00000000..648e92f7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/mixed-app.s b/binutils-2.17/ld/testsuite/ld-arm/mixed-app.s
new file mode 100644
index 00000000..ce82487b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/mixed-app.sym b/binutils-2.17/ld/testsuite/ld-arm/mixed-app.sym
new file mode 100644
index 00000000..49c5edf1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/mixed-app.sym
@@ -0,0 +1,18 @@
+
+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]*.* 20 FUNC GLOBAL DEFAULT UND lib_func1
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT 11 __data_start
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _stack
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ .. ..: .......0 0 FUNC GLOBAL DEFAULT 8 app_func2
+ .. ..: 0*[^0]*.* 2 FUNC GLOBAL DEFAULT UND lib_func2
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end
diff --git a/binutils-2.17/ld/testsuite/ld-arm/mixed-lib.d b/binutils-2.17/ld/testsuite/ld-arm/mixed-lib.d
new file mode 100644
index 00000000..b261c67f
--- /dev/null
+++ b/binutils-2.17/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 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, #.* ; 0x.*
+ .*: e28cca.* add ip, ip, #.* ; 0x.*
+ .*: e5bcf.* ldr pc, \[ip, #.*\]!
+Disassembly of section .text:
+
+.* <lib_func1>:
+ .*: e1a0c00d mov ip, sp
+ .*: e92dd800 stmdb sp!, {fp, ip, lr, pc}
+ .*: ebfffff. bl .* <lib_func1-0x..>
+ .*: e89d6800 ldmia 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.17/ld/testsuite/ld-arm/mixed-lib.r b/binutils-2.17/ld/testsuite/ld-arm/mixed-lib.r
new file mode 100644
index 00000000..01378800
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/mixed-lib.s b/binutils-2.17/ld/testsuite/ld-arm/mixed-lib.s
new file mode 100644
index 00000000..86f5aced
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/mixed-lib.sym b/binutils-2.17/ld/testsuite/ld-arm/mixed-lib.sym
new file mode 100644
index 00000000..4ccccdb3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/mixed-lib.sym
@@ -0,0 +1,18 @@
+
+Symbol table for image:
+ Num Buc: Value Size Type Bind Vis Ndx Name
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _edata
+ .. ..: .......0 20 FUNC GLOBAL DEFAULT 6 lib_func1
+ .. ..: .......1 2 FUNC GLOBAL DEFAULT 6 lib_func2
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _bss_end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _stack
+ .. ..: ........ 4 OBJECT GLOBAL DEFAULT 9 data_obj
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_start__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS _end
+ .. ..: 00000000 0 NOTYPE GLOBAL DEFAULT UND app_func2
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_end
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT 9 __data_start
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __end__
+ .. ..: ........ 0 NOTYPE GLOBAL DEFAULT ABS __exidx_start
diff --git a/binutils-2.17/ld/testsuite/ld-arm/thumb-entry.d b/binutils-2.17/ld/testsuite/ld-arm/thumb-entry.d
new file mode 100644
index 00000000..602fd6cf
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-arm/thumb-entry.d
@@ -0,0 +1,3 @@
+#...
+ Entry point address: 0x8001
+#...
diff --git a/binutils-2.17/ld/testsuite/ld-arm/thumb-entry.s b/binutils-2.17/ld/testsuite/ld-arm/thumb-entry.s
new file mode 100644
index 00000000..5b3659d9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/thumb-rel32.d b/binutils-2.17/ld/testsuite/ld-arm/thumb-rel32.d
new file mode 100644
index 00000000..34cde4d7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/thumb-rel32.s b/binutils-2.17/ld/testsuite/ld-arm/thumb-rel32.s
new file mode 100644
index 00000000..83eb0e52
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/tls-app.d b/binutils-2.17/ld/testsuite/ld-arm/tls-app.d
new file mode 100644
index 00000000..67e5de4d
--- /dev/null
+++ b/binutils-2.17/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 0x00008220
+
+Disassembly of section .text:
+
+00008220 <foo>:
+ 8220: e1a00000 nop \(mov r0,r0\)
+ 8224: e1a00000 nop \(mov r0,r0\)
+ 8228: e1a0f00e mov pc, lr
+ 822c: 000080bc streqh r8, \[r0\], -ip
+ 8230: 000080b4 streqh r8, \[r0\], -r4
+ 8234: 000080ac andeq r8, r0, ip, lsr #1
+ 8238: 00000004 andeq r0, r0, r4
+ 823c: 000080c4 andeq r8, r0, r4, asr #1
+ 8240: 00000014 andeq r0, r0, r4, lsl r0
diff --git a/binutils-2.17/ld/testsuite/ld-arm/tls-app.r b/binutils-2.17/ld/testsuite/ld-arm/tls-app.r
new file mode 100644
index 00000000..af6c2d7a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/tls-app.s b/binutils-2.17/ld/testsuite/ld-arm/tls-app.s
new file mode 100644
index 00000000..d505295f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/tls-lib.d b/binutils-2.17/ld/testsuite/ld-arm/tls-lib.d
new file mode 100644
index 00000000..76dcfd0c
--- /dev/null
+++ b/binutils-2.17/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 muleq r0, r8, r0
+ .*: 0000808c andeq r8, r0, ip, lsl #1
+ .*: 00000004 andeq r0, r0, r4
diff --git a/binutils-2.17/ld/testsuite/ld-arm/tls-lib.r b/binutils-2.17/ld/testsuite/ld-arm/tls-lib.r
new file mode 100644
index 00000000..279b8054
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/tls-lib.s b/binutils-2.17/ld/testsuite/ld-arm/tls-lib.s
new file mode 100644
index 00000000..fa928c08
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/vxworks1-lib.dd b/binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.dd
new file mode 100644
index 00000000..e13254d9
--- /dev/null
+++ b/binutils-2.17/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 <_PROCEDURE_LINKAGE_TABLE_\+0x8>
+ 80804: e79cf009 ldr pc, \[ip, r9\]
+ 80808: 0000000c andeq r0, r0, ip
+ 8080c: e59fc000 ldr ip, \[pc, #0\] ; 80814 <_PROCEDURE_LINKAGE_TABLE_\+0x14>
+ 80810: e599f008 ldr pc, \[r9, #8\]
+ 80814: 00000000 andeq r0, r0, r0
+ 80818: e59fc000 ldr ip, \[pc, #0\] ; 80820 <_PROCEDURE_LINKAGE_TABLE_\+0x20>
+ 8081c: e79cf009 ldr pc, \[ip, r9\]
+ 80820: 00000010 andeq r0, r0, r0, lsl r0
+ 80824: e59fc000 ldr ip, \[pc, #0\] ; 8082c <_PROCEDURE_LINKAGE_TABLE_\+0x2c>
+ 80828: e599f008 ldr pc, \[r9, #8\]
+ 8082c: 0000000c andeq r0, r0, ip
+Disassembly of section \.text:
+
+00080c00 <foo>:
+ 80c00: e92dc200 stmdb sp!, {r9, lr, pc}
+ 80c04: e59f9024 ldr r9, \[pc, #36\] ; 80c30 <\.text\+0x30>
+ 80c08: e5999000 ldr r9, \[r9\]
+ 80c0c: e5999000 ldr r9, \[r9\]
+ 80c10: e59f001c ldr r0, \[pc, #28\] ; 80c34 <\.text\+0x34>
+ 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 <_PROCEDURE_LINKAGE_TABLE_\+0x18>
+ 80c28: ebfffef4 bl 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80c2c: e8bd8200 ldmia sp!, {r9, pc}
+ 80c30: 00000000 andeq r0, r0, r0
+ 80c34: 00000014 andeq r0, r0, r4, lsl r0
+
+00080c38 <slocal>:
+ 80c38: e1a0f00e mov pc, lr
+
+00080c3c <sglobal>:
+ 80c3c: e1a0f00e mov pc, lr
diff --git a/binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.nd b/binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.nd
new file mode 100644
index 00000000..edf3db39
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/vxworks1-lib.rd b/binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.rd
new file mode 100644
index 00000000..c4c46f69
--- /dev/null
+++ b/binutils-2.17/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
+00081c00 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 00081800 x \+ 0
diff --git a/binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.s b/binutils-2.17/ld/testsuite/ld-arm/vxworks1-lib.s
new file mode 100644
index 00000000..66dfd1e8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/vxworks1-static.d b/binutils-2.17/ld/testsuite/ld-arm/vxworks1-static.d
new file mode 100644
index 00000000..88c0baf1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/vxworks1.dd b/binutils-2.17/ld/testsuite/ld-arm/vxworks1.dd
new file mode 100644
index 00000000..529e3a56
--- /dev/null
+++ b/binutils-2.17/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 <_PROCEDURE_LINKAGE_TABLE_\+0xc>
+ 80808: e59cf008 ldr pc, \[ip, #8\]
+ 8080c: 00081400 andeq r1, r8, r0, lsl #8
+ 8080c: R_ARM_ABS32 _GLOBAL_OFFSET_TABLE_
+ 80810: e59fc000 ldr ip, \[pc, #0\] ; 80818 <_PROCEDURE_LINKAGE_TABLE_\+0x18>
+ 80814: e59cf000 ldr pc, \[ip\]
+ 80818: 0008140c andeq r1, r8, ip, lsl #8
+ 80818: R_ARM_ABS32 _GLOBAL_OFFSET_TABLE_\+0xc
+ 8081c: e59fc000 ldr ip, \[pc, #0\] ; 80824 <_PROCEDURE_LINKAGE_TABLE_\+0x24>
+ 80820: eafffff6 b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 80824: 00000000 andeq r0, r0, r0
+ 80828: e59fc000 ldr ip, \[pc, #0\] ; 80830 <_PROCEDURE_LINKAGE_TABLE_\+0x30>
+ 8082c: e59cf000 ldr pc, \[ip\]
+ 80830: 00081410 andeq r1, r8, r0, lsl r4
+ 80830: R_ARM_ABS32 _GLOBAL_OFFSET_TABLE_\+0x10
+ 80834: e59fc000 ldr ip, \[pc, #0\] ; 8083c <_PROCEDURE_LINKAGE_TABLE_\+0x3c>
+ 80838: eafffff0 b 80800 <_PROCEDURE_LINKAGE_TABLE_>
+ 8083c: 0000000c andeq r0, r0, ip
+Disassembly of section \.text:
+
+00080c00 <_start>:
+ 80c00: ebffff08 bl 80428 <_PROCEDURE_LINKAGE_TABLE_-0x3d8>
+ 80c00: R_ARM_PC24 \.plt\+0x20
+ 80c04: eb000000 bl 80c14 <sexternal\+0x8>
+ 80c04: R_ARM_PC24 sexternal\+0xfffffff8
+ 80c08: eaffff00 b 80408 <_PROCEDURE_LINKAGE_TABLE_-0x3f8>
+ 80c08: R_ARM_PC24 \.plt\+0x8
+
+00080c0c <sexternal>:
+ 80c0c: e1a0f00e mov pc, lr
diff --git a/binutils-2.17/ld/testsuite/ld-arm/vxworks1.ld b/binutils-2.17/ld/testsuite/ld-arm/vxworks1.ld
new file mode 100644
index 00000000..ec5039d4
--- /dev/null
+++ b/binutils-2.17/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);
+ .bss : { *(.bss) *(.dynbss) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-arm/vxworks1.rd b/binutils-2.17/ld/testsuite/ld-arm/vxworks1.rd
new file mode 100644
index 00000000..8d7d5cb1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/vxworks1.s b/binutils-2.17/ld/testsuite/ld-arm/vxworks1.s
new file mode 100644
index 00000000..0139a119
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/vxworks2-static.sd b/binutils-2.17/ld/testsuite/ld-arm/vxworks2-static.sd
new file mode 100644
index 00000000..912755bc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/vxworks2.s b/binutils-2.17/ld/testsuite/ld-arm/vxworks2.s
new file mode 100644
index 00000000..1bd207bf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-arm/vxworks2.sd b/binutils-2.17/ld/testsuite/ld-arm/vxworks2.sd
new file mode 100644
index 00000000..5ff87d3b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-auto-import/auto-import.exp b/binutils-2.17/ld/testsuite/ld-auto-import/auto-import.exp
new file mode 100644
index 00000000..e052b315
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-auto-import/auto-import.exp
@@ -0,0 +1,160 @@
+# Expect script for ld-auto-import tests
+# Copyright 2002
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Written by Ralf.Habacker@freenet.de
+# Based on ls-shared/shared.exp by Ian Lance Taylor (ian@cygnus.com)
+#
+
+# Note:
+#
+# This test checks the "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 4 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.
+
+# 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 *-pc-cygwin]
+ && ![istarget *-pc-mingw*] } {
+ return
+}
+
+# No compiler, no test.
+if { [which $CC] == 0 } {
+ untested "Auto import test"
+ 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
+ } else {
+ 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"
+ } elseif ![ld_special_link "$ld -shared --out-implib=$tmpdir/libstandard.dll.a" $tmpdir/dll.dll "$tmpdir/dll.o $MYLIBS" ] {
+ fail "linking shared lib"
+ } else {
+ # 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"
+ } else {
+ # Check linking with import library.
+ set msg "linking auto-import client using a standard import library"
+ if [ld_special_link $ld $tmpdir/client.exe "--enable-auto-import /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.exe "--enable-auto-import /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/clientimport.exe "--enable-auto-import /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/clientimport.exe "--disable-auto-import /lib/crt0.o $tmpdir/client.o -L$tmpdir -ldll $MYLIBS" ] {
+ pass $msg
+ } else {
+ fail $msg
+ }
+ }
+ }
+}
+
+if [istarget *-pc-mingw*] {
+ unsupported "mingw currently not supported"
+}
diff --git a/binutils-2.17/ld/testsuite/ld-auto-import/client.c b/binutils-2.17/ld/testsuite/ld-auto-import/client.c
new file mode 100644
index 00000000..9ed80c58
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-auto-import/client.c
@@ -0,0 +1,55 @@
+#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);
+}
+TEST;
+
+TEST xyz = { &var, print_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]);
+
+ return 0;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-auto-import/dll.c b/binutils-2.17/ld/testsuite/ld-auto-import/dll.c
new file mode 100644
index 00000000..ccf85e4f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-bootstrap/bootstrap.exp b/binutils-2.17/ld/testsuite/ld-bootstrap/bootstrap.exp
new file mode 100644
index 00000000..58cb9696
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-bootstrap/bootstrap.exp
@@ -0,0 +1,174 @@
+# Expect script for LD Bootstrap Tests
+# Copyright 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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
+}
+
+# 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
+ }
+
+ # If we only have a shared libbfd, we probably can't run the
+ # --static test.
+ 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 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"] {
+ 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"] {
+ fail $testname
+ continue
+ }
+
+ if ![ld_link tmpdir/ld2 tmpdir/ld3 "$flags $OFILES $BFDLIB $LIBIBERTY"] {
+ 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
+ }
+ }
+ }
+
+ send_log "compare (tail of) tmpdir/ld2 tmpdir/ld3\n"
+ verbose "compare (tail of) tmpdir/ld2 tmpdir/ld3"
+ if {[istarget "*-*-pe"]
+ || [istarget "*-*-wince"]
+ || [istarget "*-*-cygwin*"]
+ || [istarget "*-*-winnt*"]
+ || [istarget "*-*-mingw32*"]
+ || [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.
+ exec tail +140 tmpdir/ld2 >tmpdir/ld2tail
+ exec tail +140 tmpdir/ld3 >tmpdir/ld3tail
+ catch "exec cmp tmpdir/ld2tail tmpdir/ld3tail" exec_output
+ exec rm tmpdir/ld2tail tmpdir/ld3tail
+ } 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/ld1tail tmpdir/ld2tail tmpdir/ld3tail" status
diff --git a/binutils-2.17/ld/testsuite/ld-cdtest/cdtest-bar.cc b/binutils-2.17/ld/testsuite/ld-cdtest/cdtest-bar.cc
new file mode 100644
index 00000000..79000e33
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cdtest/cdtest-foo.cc b/binutils-2.17/ld/testsuite/ld-cdtest/cdtest-foo.cc
new file mode 100644
index 00000000..db76b020
--- /dev/null
+++ b/binutils-2.17/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* dest, 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.17/ld/testsuite/ld-cdtest/cdtest-foo.h b/binutils-2.17/ld/testsuite/ld-cdtest/cdtest-foo.h
new file mode 100644
index 00000000..f36efb7f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cdtest/cdtest-main.cc b/binutils-2.17/ld/testsuite/ld-cdtest/cdtest-main.cc
new file mode 100644
index 00000000..bc881da4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cdtest/cdtest-nrv.dat b/binutils-2.17/ld/testsuite/ld-cdtest/cdtest-nrv.dat
new file mode 100644
index 00000000..d3f871ff
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cdtest/cdtest.dat b/binutils-2.17/ld/testsuite/ld-cdtest/cdtest.dat
new file mode 100644
index 00000000..39be0dbc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cdtest/cdtest.exp b/binutils-2.17/ld/testsuite/ld-cdtest/cdtest.exp
new file mode 100644
index 00000000..8df8c97a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cdtest/cdtest.exp
@@ -0,0 +1,124 @@
+# Expect script for LD cdtest Tests
+# Copyright 1993, 1994, 1995, 1997, 2001, 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-checks/asm.s b/binutils-2.17/ld/testsuite/ld-checks/asm.s
new file mode 100644
index 00000000..86e7310a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-checks/checks.exp b/binutils-2.17/ld/testsuite/ld-checks/checks.exp
new file mode 100644
index 00000000..5e2750de
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-checks/checks.exp
@@ -0,0 +1,80 @@
+# Expect script for LD section checks tests
+# Copyright 1999, 2001, 2003 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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"
+
+ 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 futher.
+
+ verbose -log "$ld -o tmpdir/asm.x $ldflags tmpdir/asm.o"
+ catch "exec $ld -o tmpdir/asm.x $ldflags tmpdir/asm.o" exec_output
+ 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.17/ld/testsuite/ld-checks/script b/binutils-2.17/ld/testsuite/ld-checks/script
new file mode 100644
index 00000000..44c6a084
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/badgotr1.d b/binutils-2.17/ld/testsuite/ld-cris/badgotr1.d
new file mode 100644
index 00000000..7ef70366
--- /dev/null
+++ b/binutils-2.17/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: ^[^c][^h][^i][^l][^d].* uses _-prefixed .* failed to merge .* no GOT .* Bad value$
+
+# 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.17/ld/testsuite/ld-cris/comref1.s b/binutils-2.17/ld/testsuite/ld-cris/comref1.s
new file mode 100644
index 00000000..5be25d82
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/cris.exp b/binutils-2.17/ld/testsuite/ld-cris/cris.exp
new file mode 100644
index 00000000..76f32462
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/cris.exp
@@ -0,0 +1,55 @@
+# Expect script for ld-cris tests
+# Copyright 2002 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.
+# FIXME: Add option "ldtail: option" to run_dump_test, so we can link
+# libraries in the right order.
+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 tail $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.17/ld/testsuite/ld-cris/def2.d b/binutils-2.17/ld/testsuite/ld-cris/def2.d
new file mode 100644
index 00000000..ff75d88a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/def3.d b/binutils-2.17/ld/testsuite/ld-cris/def3.d
new file mode 100644
index 00000000..e1ae3c5e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/dso-1.s b/binutils-2.17/ld/testsuite/ld-cris/dso-1.s
new file mode 100644
index 00000000..6c621b5a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/dso-1.s
@@ -0,0 +1,8 @@
+ .text
+ .global dsofn
+ .type dsofn,@function
+ .p2align 1
+dsofn:
+ nop
+.Lfe:
+ .size dsofn,.Lfe1-dsofn
diff --git a/binutils-2.17/ld/testsuite/ld-cris/dso-2.s b/binutils-2.17/ld/testsuite/ld-cris/dso-2.s
new file mode 100644
index 00000000..f7c38a68
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/dso-3.s b/binutils-2.17/ld/testsuite/ld-cris/dso-3.s
new file mode 100644
index 00000000..6610504e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/dsofnf.s b/binutils-2.17/ld/testsuite/ld-cris/dsofnf.s
new file mode 100644
index 00000000..bf0a4fad
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/dsofnf2.s b/binutils-2.17/ld/testsuite/ld-cris/dsofnf2.s
new file mode 100644
index 00000000..fbf23848
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/dsov32-1.s b/binutils-2.17/ld/testsuite/ld-cris/dsov32-1.s
new file mode 100644
index 00000000..07a3e9c4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/dsov32-2.s b/binutils-2.17/ld/testsuite/ld-cris/dsov32-2.s
new file mode 100644
index 00000000..672f2730
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/dsov32-3.s b/binutils-2.17/ld/testsuite/ld-cris/dsov32-3.s
new file mode 100644
index 00000000..768b06c6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/dsov32-4.s b/binutils-2.17/ld/testsuite/ld-cris/dsov32-4.s
new file mode 100644
index 00000000..d06768ae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/euwref1.s b/binutils-2.17/ld/testsuite/ld-cris/euwref1.s
new file mode 100644
index 00000000..5d21f4af
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/expdref1.s b/binutils-2.17/ld/testsuite/ld-cris/expdref1.s
new file mode 100644
index 00000000..58faa60a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/expdyn1.d b/binutils-2.17/ld/testsuite/ld-cris/expdyn1.d
new file mode 100644
index 00000000..51d875db
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/expdyn1.s b/binutils-2.17/ld/testsuite/ld-cris/expdyn1.s
new file mode 100644
index 00000000..646be85d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/expdyn2.d b/binutils-2.17/ld/testsuite/ld-cris/expdyn2.d
new file mode 100644
index 00000000..6c5faa59
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/expdyn3.d b/binutils-2.17/ld/testsuite/ld-cris/expdyn3.d
new file mode 100644
index 00000000..34f2a5ef
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/expdyn4.d b/binutils-2.17/ld/testsuite/ld-cris/expdyn4.d
new file mode 100644
index 00000000..e9320566
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/expdyn5.d b/binutils-2.17/ld/testsuite/ld-cris/expdyn5.d
new file mode 100644
index 00000000..55045340
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/expdyn6.d b/binutils-2.17/ld/testsuite/ld-cris/expdyn6.d
new file mode 100644
index 00000000..43d04ff9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/expdyn7.d b/binutils-2.17/ld/testsuite/ld-cris/expdyn7.d
new file mode 100644
index 00000000..7bd91e06
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/globsym1ref.s b/binutils-2.17/ld/testsuite/ld-cris/globsym1ref.s
new file mode 100644
index 00000000..03d44771
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/globsym1ref.s
@@ -0,0 +1 @@
+ .long globsym1
diff --git a/binutils-2.17/ld/testsuite/ld-cris/globsymw1.s b/binutils-2.17/ld/testsuite/ld-cris/globsymw1.s
new file mode 100644
index 00000000..955014da
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/globsymw2.s b/binutils-2.17/ld/testsuite/ld-cris/globsymw2.s
new file mode 100644
index 00000000..a9e11ffb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/gotplt1.d b/binutils-2.17/ld/testsuite/ld-cris/gotplt1.d
new file mode 100644
index 00000000..8fcb7b58
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/gotplt2.d b/binutils-2.17/ld/testsuite/ld-cris/gotplt2.d
new file mode 100644
index 00000000..48f14136
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/gotplt3.d b/binutils-2.17/ld/testsuite/ld-cris/gotplt3.d
new file mode 100644
index 00000000..f4cb4be6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/gotrel1.s b/binutils-2.17/ld/testsuite/ld-cris/gotrel1.s
new file mode 100644
index 00000000..68f035d5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/gotrel1.s
@@ -0,0 +1,4 @@
+ .global _start
+_start:
+localsym:
+ move.d localsym:GOTOFF,$r3
diff --git a/binutils-2.17/ld/testsuite/ld-cris/gotrel2.s b/binutils-2.17/ld/testsuite/ld-cris/gotrel2.s
new file mode 100644
index 00000000..3f986746
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/hiddef1.d b/binutils-2.17/ld/testsuite/ld-cris/hiddef1.d
new file mode 100644
index 00000000..de004303
--- /dev/null
+++ b/binutils-2.17/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 19 entries:
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-cris/hiddef1.s b/binutils-2.17/ld/testsuite/ld-cris/hiddef1.s
new file mode 100644
index 00000000..ac24c81b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/hiddef1.s
@@ -0,0 +1,2 @@
+ .include "dso-1.s"
+ .hidden dsofn
diff --git a/binutils-2.17/ld/testsuite/ld-cris/hide1 b/binutils-2.17/ld/testsuite/ld-cris/hide1
new file mode 100644
index 00000000..655871d4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/hide1
@@ -0,0 +1 @@
+TST1 { global: export_*; local: *; };
diff --git a/binutils-2.17/ld/testsuite/ld-cris/hidrefgotplt1.s b/binutils-2.17/ld/testsuite/ld-cris/hidrefgotplt1.s
new file mode 100644
index 00000000..020ff16e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/hidrefgotplt1.s
@@ -0,0 +1,2 @@
+ .text
+ move.d [$r0+dsofn:GOTPLT],$r1
diff --git a/binutils-2.17/ld/testsuite/ld-cris/ldsym1.d b/binutils-2.17/ld/testsuite/ld-cris/ldsym1.d
new file mode 100644
index 00000000..1a2a61a9
--- /dev/null
+++ b/binutils-2.17/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+ <__start>:
+ 0: 0f05 nop
+
+0+2 <expfn>:
+ 2: 0f05 nop
diff --git a/binutils-2.17/ld/testsuite/ld-cris/libdso-1.d b/binutils-2.17/ld/testsuite/ld-cris/libdso-1.d
new file mode 100644
index 00000000..dec0ccd5
--- /dev/null
+++ b/binutils-2.17/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 00000000 dsofn
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-cris/libdso-10.d b/binutils-2.17/ld/testsuite/ld-cris/libdso-10.d
new file mode 100644
index 00000000..e045496d
--- /dev/null
+++ b/binutils-2.17/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 0x94
+ STRTAB 0x120
+ SYMTAB 0xc0
+ STRSZ 0x1f
+ SYMENT 0x10
+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.17/ld/testsuite/ld-cris/libdso-11.d b/binutils-2.17/ld/testsuite/ld-cris/libdso-11.d
new file mode 100644
index 00000000..754edff3
--- /dev/null
+++ b/binutils-2.17/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+ 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.17/ld/testsuite/ld-cris/libdso-12.d b/binutils-2.17/ld/testsuite/ld-cris/libdso-12.d
new file mode 100644
index 00000000..2cb80389
--- /dev/null
+++ b/binutils-2.17/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+252 g DF \.text 0+12 dsofn4
+0+248 g DF \.text 0+2 expfn
+0+2310 g DO \.data 0+4 expobj
+#...
+0+24a g DF \.text 0+8 dsofn3
+#...
+0+ D \*UND\* 0+ dsofn
+#...
+Contents of section \.rela\.got:
+ 01d4 0c230000 0a050000 00000000 .*
+Contents of section \.rela\.plt:
+ 01e0 04230000 0b030000 00000000 08230000 .*
+ 01f0 0b0b0000 00000000 .*
+Contents of section \.plt:
+ 01f8 84e20401 7e7a3f7a 04f26ffa bf09b005 .*
+ 0208 00000000 00000000 00006f0d 0c000000 .*
+ 0218 6ffabf09 b0053f7e 00000000 bf0ed4ff .*
+ 0228 ffffb005 6f0d1000 00006ffa bf09b005 .*
+ 0238 3f7e0c00 0000bf0e baffffff b005 .*
+Contents of section \.text:
+ 0246 b005b005 bfbee2ff ffffb005 7f0da620 .*
+ 0256 00005f0d 1400bfbe b6ffffff b0050000 .*
+Contents of section \.dynamic:
+ 2268 04000000 94000000 05000000 98010000 .*
+ 2278 06000000 d8000000 0a000000 3a000000 .*
+ 2288 0b000000 10000000 03000000 f8220000 .*
+ 2298 02000000 18000000 14000000 07000000 .*
+ 22a8 17000000 e0010000 07000000 d4010000 .*
+ 22b8 08000000 0c000000 09000000 0c000000 .*
+ 22c8 00000000 00000000 00000000 00000000 .*
+ 22d8 00000000 00000000 00000000 00000000 .*
+ 22e8 00000000 00000000 00000000 00000000 .*
+Contents of section \.got:
+ 22f8 68220000 00000000 00000000 1e020000 .*
+ 2308 38020000 00000000 .*
+Contents of section \.data:
+ 2310 00000000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-cris/libdso-13.d b/binutils-2.17/ld/testsuite/ld-cris/libdso-13.d
new file mode 100644
index 00000000..4e66a5f1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/libdso-14.d b/binutils-2.17/ld/testsuite/ld-cris/libdso-14.d
new file mode 100644
index 00000000..c0a20e83
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/libdso-2.d b/binutils-2.17/ld/testsuite/ld-cris/libdso-2.d
new file mode 100644
index 00000000..f67c7b07
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/libdso-2.d
@@ -0,0 +1,61 @@
+#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:
+#...
+00002200 0000000c R_CRIS_RELATIVE 00000158
+#...
+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+15c 0 FUNC GLOBAL DEFAULT 7 export_1@@TST1
+
+Symbol table '\.symtab' contains 21 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-9a-f]+ 0 SECTION LOCAL DEFAULT 10
+ 11: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 11
+ 12: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 12
+ 13: 0+216c 0 OBJECT LOCAL HIDDEN ABS _DYNAMIC
+ 14: 0+2204 0 NOTYPE LOCAL DEFAULT ABS __bss_start
+ 15: 0+2204 0 NOTYPE LOCAL DEFAULT ABS _edata
+ 16: 0+21f4 0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+ 17: 0+2220 0 NOTYPE LOCAL DEFAULT ABS _end
+ 18: 0+158 0 FUNC LOCAL DEFAULT 7 dsofn
+ 19: 0+ 0 OBJECT GLOBAL DEFAULT ABS TST1
+ 20: 0+15c 0 FUNC GLOBAL DEFAULT 7 export_1
diff --git a/binutils-2.17/ld/testsuite/ld-cris/libdso-3.d b/binutils-2.17/ld/testsuite/ld-cris/libdso-3.d
new file mode 100644
index 00000000..9e18c59e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/libdso-4.d b/binutils-2.17/ld/testsuite/ld-cris/libdso-4.d
new file mode 100644
index 00000000..b7cc8404
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/locref1.d b/binutils-2.17/ld/testsuite/ld-cris/locref1.d
new file mode 100644
index 00000000..e38c642f
--- /dev/null
+++ b/binutils-2.17/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+ \.hidden _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.17/ld/testsuite/ld-cris/locref1.s b/binutils-2.17/ld/testsuite/ld-cris/locref1.s
new file mode 100644
index 00000000..7a298417
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/locref2.d b/binutils-2.17/ld/testsuite/ld-cris/locref2.d
new file mode 100644
index 00000000..8b51d45c
--- /dev/null
+++ b/binutils-2.17/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+ \.hidden _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.17/ld/testsuite/ld-cris/locref2.s b/binutils-2.17/ld/testsuite/ld-cris/locref2.s
new file mode 100644
index 00000000..3b407a65
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/move-1.s b/binutils-2.17/ld/testsuite/ld-cris/move-1.s
new file mode 100644
index 00000000..c0232858
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/move-1.s
@@ -0,0 +1,3 @@
+ .text
+localsym:
+ moveq 1,$r10
diff --git a/binutils-2.17/ld/testsuite/ld-cris/nodyn4.d b/binutils-2.17/ld/testsuite/ld-cris/nodyn4.d
new file mode 100644
index 00000000..c1af092b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/nodyn5.d b/binutils-2.17/ld/testsuite/ld-cris/nodyn5.d
new file mode 100644
index 00000000..28b581e0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/noglob1.d b/binutils-2.17/ld/testsuite/ld-cris/noglob1.d
new file mode 100644
index 00000000..49ca3b64
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/noglob1.s b/binutils-2.17/ld/testsuite/ld-cris/noglob1.s
new file mode 100644
index 00000000..62111bf8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/noglob1.s
@@ -0,0 +1,4 @@
+; See noglob1.d
+ .text
+x:
+ move.d .,$r0
diff --git a/binutils-2.17/ld/testsuite/ld-cris/noov.d b/binutils-2.17/ld/testsuite/ld-cris/noov.d
new file mode 100644
index 00000000..c591583b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/noov.s b/binutils-2.17/ld/testsuite/ld-cris/noov.s
new file mode 100644
index 00000000..88e803fd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/pv32-1.d b/binutils-2.17/ld/testsuite/ld-cris/pv32-1.d
new file mode 100644
index 00000000..2684c952
--- /dev/null
+++ b/binutils-2.17/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+2 expfn
+0+82324 g DO \.bss 0+4 expobj
+0+82324 g D \*ABS\* 0+ __bss_start
+0+80238 DF \*UND\* 0+8 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.17/ld/testsuite/ld-cris/pv32.s b/binutils-2.17/ld/testsuite/ld-cris/pv32.s
new file mode 100644
index 00000000..d5ef7c63
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cris/pv32.s
@@ -0,0 +1,24 @@
+ .global here
+ .type here,@function
+here:
+ nop
+.Lfe3:
+ .size here,.Lfe3-dsofn
+
+ .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.17/ld/testsuite/ld-cris/stabs1.s b/binutils-2.17/ld/testsuite/ld-cris/stabs1.s
new file mode 100644
index 00000000..837d69d6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/start1.s b/binutils-2.17/ld/testsuite/ld-cris/start1.s
new file mode 100644
index 00000000..ef09d372
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/undef1.d b/binutils-2.17/ld/testsuite/ld-cris/undef1.d
new file mode 100644
index 00000000..70d007e1
--- /dev/null
+++ b/binutils-2.17/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 00000000 dsofn
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-cris/undef2.d b/binutils-2.17/ld/testsuite/ld-cris/undef2.d
new file mode 100644
index 00000000..46015c00
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/undef3.d b/binutils-2.17/ld/testsuite/ld-cris/undef3.d
new file mode 100644
index 00000000..e7bca10c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/v10-v32.d b/binutils-2.17/ld/testsuite/ld-cris/v10-v32.d
new file mode 100644
index 00000000..d6929263
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/v10-va.d b/binutils-2.17/ld/testsuite/ld-cris/v10-va.d
new file mode 100644
index 00000000..c6db037b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/v32-ba-1.d b/binutils-2.17/ld/testsuite/ld-cris/v32-ba-1.d
new file mode 100644
index 00000000..24d07512
--- /dev/null
+++ b/binutils-2.17/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>:
+ 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.17/ld/testsuite/ld-cris/v32-ba-1.s b/binutils-2.17/ld/testsuite/ld-cris/v32-ba-1.s
new file mode 100644
index 00000000..189769ea
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/v32-bin-1.d b/binutils-2.17/ld/testsuite/ld-cris/v32-bin-1.d
new file mode 100644
index 00000000..3a8714bf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/v32-bin-1.s b/binutils-2.17/ld/testsuite/ld-cris/v32-bin-1.s
new file mode 100644
index 00000000..1f021d80
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/v32-v10.d b/binutils-2.17/ld/testsuite/ld-cris/v32-v10.d
new file mode 100644
index 00000000..a96120fa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/v32-va.d b/binutils-2.17/ld/testsuite/ld-cris/v32-va.d
new file mode 100644
index 00000000..526d3c38
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/va-v10.d b/binutils-2.17/ld/testsuite/ld-cris/va-v10.d
new file mode 100644
index 00000000..d6bda585
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/va-v32.d b/binutils-2.17/ld/testsuite/ld-cris/va-v32.d
new file mode 100644
index 00000000..b598ff5e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/warn1.d b/binutils-2.17/ld/testsuite/ld-cris/warn1.d
new file mode 100644
index 00000000..ecdf19e0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/warn2.d b/binutils-2.17/ld/testsuite/ld-cris/warn2.d
new file mode 100644
index 00000000..96f089e3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/warn3.d b/binutils-2.17/ld/testsuite/ld-cris/warn3.d
new file mode 100644
index 00000000..c01b6cb8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/warn4.d b/binutils-2.17/ld/testsuite/ld-cris/warn4.d
new file mode 100644
index 00000000..dc096b63
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/weakref1.d b/binutils-2.17/ld/testsuite/ld-cris/weakref1.d
new file mode 100644
index 00000000..6dab5e40
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cris/weakref2.d b/binutils-2.17/ld/testsuite/ld-cris/weakref2.d
new file mode 100644
index 00000000..b78ccca5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/crx.exp b/binutils-2.17/ld/testsuite/ld-crx/crx.exp
new file mode 100644
index 00000000..6587fc77
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-crx/crx.exp
@@ -0,0 +1,32 @@
+# Expect script for ld-crx tests
+# Copyright 2004 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-crx/crx.ld b/binutils-2.17/ld/testsuite/ld-crx/crx.ld
new file mode 100644
index 00000000..703b934a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-abs32.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-abs32.d
new file mode 100644
index 00000000..c4bd8cfe
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-abs32.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-abs32.s
new file mode 100644
index 00000000..40ead768
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-imm16.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-imm16.d
new file mode 100644
index 00000000..31aab630
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-imm16.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-imm16.s
new file mode 100644
index 00000000..3e0cc2e6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-imm32.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-imm32.d
new file mode 100644
index 00000000..9831a68c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-imm32.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-imm32.s
new file mode 100644
index 00000000..ccf71bed
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-num16.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-num16.d
new file mode 100644
index 00000000..72bf342d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-num16.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-num16.s
new file mode 100644
index 00000000..ff033e19
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-num32.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-num32.d
new file mode 100644
index 00000000..bdd9ee96
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-num32.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-num32.s
new file mode 100644
index 00000000..201682cb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-num8.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-num8.d
new file mode 100644
index 00000000..38927de8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-num8.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-num8.s
new file mode 100644
index 00000000..4dc70b54
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-regrel12.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-regrel12.d
new file mode 100644
index 00000000..e681d9f5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-regrel12.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-regrel12.s
new file mode 100644
index 00000000..060502b4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-regrel22.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-regrel22.d
new file mode 100644
index 00000000..7c4ba1b6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-regrel22.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-regrel22.s
new file mode 100644
index 00000000..478b5e23
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-regrel28.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-regrel28.d
new file mode 100644
index 00000000..057118ba
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-regrel28.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-regrel28.s
new file mode 100644
index 00000000..2be418fc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-regrel32.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-regrel32.d
new file mode 100644
index 00000000..90225207
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-regrel32.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-regrel32.s
new file mode 100644
index 00000000..dcfc0cda
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel16.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel16.d
new file mode 100644
index 00000000..15b820ee
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel16.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel16.s
new file mode 100644
index 00000000..65ec1975
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel24.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel24.d
new file mode 100644
index 00000000..c72af5ac
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel24.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel24.s
new file mode 100644
index 00000000..e772dddb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel32.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel32.d
new file mode 100644
index 00000000..31f462bf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel32.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel32.s
new file mode 100644
index 00000000..6b010a92
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel4.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel4.d
new file mode 100644
index 00000000..be9ff366
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel4.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel4.s
new file mode 100644
index 00000000..138f6b69
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel8-cmp.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel8-cmp.d
new file mode 100644
index 00000000..2d1a2453
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel8-cmp.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel8-cmp.s
new file mode 100644
index 00000000..61e5dd43
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel8.d b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel8.d
new file mode 100644
index 00000000..d76ec63f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-crx/reloc-rel8.s b/binutils-2.17/ld/testsuite/ld-crx/reloc-rel8.s
new file mode 100644
index 00000000..9692f3c5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cygwin/exe-export.exp b/binutils-2.17/ld/testsuite/ld-cygwin/exe-export.exp
new file mode 100644
index 00000000..1606ac0f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cygwin/exe-export.exp
@@ -0,0 +1,151 @@
+# Expect script for export table in executables tests
+# Copyright 2003
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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"] {
+ 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.17/ld/testsuite/ld-cygwin/testdll.c b/binutils-2.17/ld/testsuite/ld-cygwin/testdll.c
new file mode 100644
index 00000000..20643073
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-cygwin/testdll.def b/binutils-2.17/ld/testsuite/ld-cygwin/testdll.def
new file mode 100644
index 00000000..05e6c886
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cygwin/testdll.def
@@ -0,0 +1,4 @@
+LIBRARY testdll
+
+EXPORTS
+dllwrite
diff --git a/binutils-2.17/ld/testsuite/ld-cygwin/testexe.c b/binutils-2.17/ld/testsuite/ld-cygwin/testexe.c
new file mode 100644
index 00000000..333c3892
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cygwin/testexe.c
@@ -0,0 +1,16 @@
+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 ();
+ return 0;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-cygwin/testexe.def b/binutils-2.17/ld/testsuite/ld-cygwin/testexe.def
new file mode 100644
index 00000000..7570578c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-cygwin/testexe.def
@@ -0,0 +1,5 @@
+NAME testexe.exe
+
+EXPORTS
+exewrite
+global_a DATA
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/d10v.exp b/binutils-2.17/ld/testsuite/ld-d10v/d10v.exp
new file mode 100644
index 00000000..8048e012
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/d10v.exp
@@ -0,0 +1,250 @@
+# Expect script for ld-d10v tests
+# Copyright 2002 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-d10v/default_layout.d b/binutils-2.17/ld/testsuite/ld-d10v/default_layout.d
new file mode 100644
index 00000000..c14feb41
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/linktest-001.s b/binutils-2.17/ld/testsuite/ld-d10v/linktest-001.s
new file mode 100644
index 00000000..fc8916cf
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/linktest-001.s
@@ -0,0 +1,4 @@
+ .section .data
+ .global bar
+bar:
+ .space 64
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/linktest-002.lt b/binutils-2.17/ld/testsuite/ld-d10v/linktest-002.lt
new file mode 100644
index 00000000..ffc6cfda
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/linktest-002.lt
@@ -0,0 +1,2 @@
+#source: linktest-001.s
+#source: linktest-002.s
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/linktest-002.s b/binutils-2.17/ld/testsuite/ld-d10v/linktest-002.s
new file mode 100644
index 00000000..32955591
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/linktest-002.s
@@ -0,0 +1,4 @@
+ .section .text
+ .global _start
+_start:
+ ldi r0,bar
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/regression-001.lt b/binutils-2.17/ld/testsuite/ld-d10v/regression-001.lt
new file mode 100644
index 00000000..6481a594
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/regression-001.lt
@@ -0,0 +1,3 @@
+#source: regression-001.s
+#as: -W
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/regression-001.s b/binutils-2.17/ld/testsuite/ld-d10v/regression-001.s
new file mode 100644
index 00000000..60226c19
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-001.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-001.d
new file mode 100644
index 00000000..8cbe9f0e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-001.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-001.ld
new file mode 100644
index 00000000..a3275f5f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-001.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x100);
+ }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-001.s b/binutils-2.17/ld/testsuite/ld-d10v/reloc-001.s
new file mode 100644
index 00000000..bed56c77
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-002.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-002.d
new file mode 100644
index 00000000..c80b3ffd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-002.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-002.ld
new file mode 100644
index 00000000..8f991b29
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-002.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x1F8);
+ }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-003.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-003.d
new file mode 100644
index 00000000..009e228a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-003.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-003.ld
new file mode 100644
index 00000000..7008d9d1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-003.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x1FC);
+ }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-004.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-004.d
new file mode 100644
index 00000000..49801de1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-004.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-004.ld
new file mode 100644
index 00000000..5f06d60b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-004.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x400);
+ }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-005.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-005.d
new file mode 100644
index 00000000..633de718
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-005.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-005.ld
new file mode 100644
index 00000000..a3f5b067
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-005.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x4000);
+ }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-005.s b/binutils-2.17/ld/testsuite/ld-d10v/reloc-005.s
new file mode 100644
index 00000000..34ebb056
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-006.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-006.d
new file mode 100644
index 00000000..b0fd080c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-006.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-006.ld
new file mode 100644
index 00000000..3d1a0f69
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-006.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x1fff4);
+ }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-007.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-007.d
new file mode 100644
index 00000000..2edb862a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-007.d
@@ -0,0 +1,7 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-007.ld
+#objdump: -D
+#error: relocation truncated to fit: R_D10V_18_PCREL
+
+# Test 18 bit pc rel reloc bad boundary
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-007.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-007.ld
new file mode 100644
index 00000000..10c50ff8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-007.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x1fff8);
+ }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-008.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-008.d
new file mode 100644
index 00000000..cb3cf4b9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-008.d
@@ -0,0 +1,7 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-008.ld
+#objdump: -D
+#error: relocation truncated to fit: R_D10V_18_PCREL
+
+# Test 18 bit pc rel reloc normal bad
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-008.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-008.ld
new file mode 100644
index 00000000..d42e0ee2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-008.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ *(.text)
+ foo = (. + 0x41fff8);
+ }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-009.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-009.d
new file mode 100644
index 00000000..45373c91
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-009.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-009.ld
new file mode 100644
index 00000000..af6e7755
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-009.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x100);
+ *(.text)
+ }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-009.s b/binutils-2.17/ld/testsuite/ld-d10v/reloc-009.s
new file mode 100644
index 00000000..fb2ebce9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-010.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-010.d
new file mode 100644
index 00000000..47e048f9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-010.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-010.ld
new file mode 100644
index 00000000..9b3d81aa
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-010.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x200);
+ *(.text)
+ }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-011.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-011.d
new file mode 100644
index 00000000..2bfc9036
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-011.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-011.ld
new file mode 100644
index 00000000..e7a8151e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-011.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x204);
+ *(.text)
+ }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-012.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-012.d
new file mode 100644
index 00000000..ffb03d48
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-012.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-012.ld
new file mode 100644
index 00000000..10b7e7cf
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-012.ld
@@ -0,0 +1,11 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x80004);
+ *(.text)
+ }
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-013.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-013.d
new file mode 100644
index 00000000..a422fb0d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-013.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-013.ld
new file mode 100644
index 00000000..a6c08081
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-013.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x400);
+ *(.text)
+ }
+}
+
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-014.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-014.d
new file mode 100644
index 00000000..5035a298
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-d10v/reloc-014.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-014.ld
new file mode 100644
index 00000000..7cda1ace
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-014.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x20000);
+ *(.text)
+ }
+}
+
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-015.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-015.d
new file mode 100644
index 00000000..5888aa73
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-015.d
@@ -0,0 +1,7 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-015.ld
+#objdump: -D
+#error: relocation truncated to fit: R_D10V_18_PCREL
+
+# Test 18 bit pc rel negative reloc bad boundary
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-015.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-015.ld
new file mode 100644
index 00000000..ab1b1838
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-015.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x20004);
+ *(.text)
+ }
+}
+
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-016.d b/binutils-2.17/ld/testsuite/ld-d10v/reloc-016.d
new file mode 100644
index 00000000..402bcff8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-016.d
@@ -0,0 +1,7 @@
+#source: reloc-005.s
+#ld: -T $srcdir/$subdir/reloc-016.ld
+#objdump: -D
+#error: relocation truncated to fit: R_D10V_18_PCREL
+
+# Test 18 bit pc rel negative reloc normal bad
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/reloc-016.ld b/binutils-2.17/ld/testsuite/ld-d10v/reloc-016.ld
new file mode 100644
index 00000000..6b5704ca
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/reloc-016.ld
@@ -0,0 +1,12 @@
+SECTIONS
+{
+ .text 0x01014000 :
+ {
+ foo = .;
+ . = (. + 0x800004);
+ *(.text)
+ }
+}
+
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-d10v/simple.s b/binutils-2.17/ld/testsuite/ld-d10v/simple.s
new file mode 100644
index 00000000..8a304f9d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-d10v/simple.s
@@ -0,0 +1,5 @@
+ .text
+ .global _start
+_start:
+ jmp r13
+
diff --git a/binutils-2.17/ld/testsuite/ld-discard/discard.exp b/binutils-2.17/ld/testsuite/ld-discard/discard.exp
new file mode 100644
index 00000000..853e5f9c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-discard/discard.exp
@@ -0,0 +1,47 @@
+# Expect script for ld discard tests
+# Copyright 2001, 2002 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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]]
+ # These fail because they use the generic linker.
+ setup_xfail "arc-*" "d30v-*" "dlx-*" "i960-*" "m6812-*" "m68hc12-*"
+ setup_xfail "or32-*" "pj-*"
+ run_dump_test [file rootname [lindex $test_list $i]]
+}
diff --git a/binutils-2.17/ld/testsuite/ld-discard/discard.ld b/binutils-2.17/ld/testsuite/ld-discard/discard.ld
new file mode 100644
index 00000000..a7ff4a58
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-discard/exit.s b/binutils-2.17/ld/testsuite/ld-discard/exit.s
new file mode 100644
index 00000000..c8529784
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-discard/extern.d b/binutils-2.17/ld/testsuite/ld-discard/extern.d
new file mode 100644
index 00000000..90337920
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-discard/extern.d
@@ -0,0 +1,11 @@
+#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
+#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.17/ld/testsuite/ld-discard/extern.s b/binutils-2.17/ld/testsuite/ld-discard/extern.s
new file mode 100644
index 00000000..464be8b6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-discard/start.d b/binutils-2.17/ld/testsuite/ld-discard/start.d
new file mode 100644
index 00000000..5c685e81
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-discard/start.d
@@ -0,0 +1,6 @@
+#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
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-discard/start.s b/binutils-2.17/ld/testsuite/ld-discard/start.s
new file mode 100644
index 00000000..70f41875
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-discard/static.d b/binutils-2.17/ld/testsuite/ld-discard/static.d
new file mode 100644
index 00000000..3b5255bc
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-discard/static.d
@@ -0,0 +1,5 @@
+#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
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-discard/static.s b/binutils-2.17/ld/testsuite/ld-discard/static.s
new file mode 100644
index 00000000..a0f45693
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/eh1.d b/binutils-2.17/ld/testsuite/ld-elf/eh1.d
new file mode 100644
index 00000000..897955b2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/eh1.d
@@ -0,0 +1,33 @@
+#source: eh1.s
+#source: eh1a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+The section .eh_frame contains:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: -8
+ Return address column: 16
+
+ DW_CFA_def_cfa: r7 ofs 8
+ DW_CFA_offset: r16 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=004000b0..004000b0
+ DW_CFA_advance_loc: 0 to 004000b0
+ DW_CFA_def_cfa_offset: 16
+ DW_CFA_offset: r6 at cfa-16
+ DW_CFA_advance_loc: 0 to 004000b0
+ DW_CFA_def_cfa_reg: r6
+
+00000038 ZERO terminator
+
diff --git a/binutils-2.17/ld/testsuite/ld-elf/eh1.s b/binutils-2.17/ld/testsuite/ld-elf/eh1.s
new file mode 100644
index 00000000..a6052096
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/eh1a.s b/binutils-2.17/ld/testsuite/ld-elf/eh1a.s
new file mode 100644
index 00000000..c644014d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/eh1a.s
@@ -0,0 +1,3 @@
+ .section .eh_frame,"a",%progbits
+ .align 8
+ .zero 4
diff --git a/binutils-2.17/ld/testsuite/ld-elf/eh2.d b/binutils-2.17/ld/testsuite/ld-elf/eh2.d
new file mode 100644
index 00000000..6f4f2c58
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/eh2.d
@@ -0,0 +1,33 @@
+#source: eh1.s
+#source: eh2a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+The section .eh_frame contains:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: -8
+ Return address column: 16
+
+ DW_CFA_def_cfa: r7 ofs 8
+ DW_CFA_offset: r16 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=004000b0..004000b0
+ DW_CFA_advance_loc: 0 to 004000b0
+ DW_CFA_def_cfa_offset: 16
+ DW_CFA_offset: r6 at cfa-16
+ DW_CFA_advance_loc: 0 to 004000b0
+ DW_CFA_def_cfa_reg: r6
+
+00000038 ZERO terminator
+
diff --git a/binutils-2.17/ld/testsuite/ld-elf/eh2a.s b/binutils-2.17/ld/testsuite/ld-elf/eh2a.s
new file mode 100644
index 00000000..2c024f8f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/eh2a.s
@@ -0,0 +1,3 @@
+ .section .eh_frame,"a",%progbits
+ .align 4
+ .zero 4
diff --git a/binutils-2.17/ld/testsuite/ld-elf/eh3.d b/binutils-2.17/ld/testsuite/ld-elf/eh3.d
new file mode 100644
index 00000000..492c8778
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/eh3.d
@@ -0,0 +1,33 @@
+#source: eh3.s
+#source: eh3a.s
+#ld:
+#readelf: -wf
+#target: x86_64-*-*
+
+The section .eh_frame contains:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: ""
+ Code alignment factor: 1
+ Data alignment factor: -8
+ Return address column: 16
+
+ DW_CFA_def_cfa: r7 ofs 8
+ DW_CFA_offset: r16 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=004000b0..004000b0
+ DW_CFA_advance_loc: 0 to 004000b0
+ DW_CFA_def_cfa_offset: 16
+ DW_CFA_offset: r6 at cfa-16
+ DW_CFA_advance_loc: 0 to 004000b0
+ DW_CFA_def_cfa_reg: r6
+
+00000038 ZERO terminator
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-elf/eh3.s b/binutils-2.17/ld/testsuite/ld-elf/eh3.s
new file mode 100644
index 00000000..24bd90d2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/eh3a.s b/binutils-2.17/ld/testsuite/ld-elf/eh3a.s
new file mode 100644
index 00000000..c245871e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/eh3a.s
@@ -0,0 +1,3 @@
+ .section .eh_frame,"a",%progbits
+ .align 8
+ .zero 8
diff --git a/binutils-2.17/ld/testsuite/ld-elf/elf.exp b/binutils-2.17/ld/testsuite/ld-elf/elf.exp
new file mode 100644
index 00000000..43c42822
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/elf.exp
@@ -0,0 +1,49 @@
+# Expect script for various ELF tests.
+# Copyright 2002, 2003 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ 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 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.17/ld/testsuite/ld-elf/empty.d b/binutils-2.17/ld/testsuite/ld-elf/empty.d
new file mode 100644
index 00000000..ecf8aea9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/empty.s b/binutils-2.17/ld/testsuite/ld-elf/empty.s
new file mode 100644
index 00000000..8c2d0e69
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/empty2.d b/binutils-2.17/ld/testsuite/ld-elf/empty2.d
new file mode 100644
index 00000000..8da351a3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/empty2.d
@@ -0,0 +1,12 @@
+#source: empty2.s
+#ld:
+#readelf: -s
+#xfail: "d30v-*-*" "dlx-*-*" "hppa*-*-*" "i960-*-*" "or32-*-*" "pj-*-*"
+
+#...
+[ ]+[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.17/ld/testsuite/ld-elf/empty2.s b/binutils-2.17/ld/testsuite/ld-elf/empty2.s
new file mode 100644
index 00000000..deed3182
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/exclude.exp b/binutils-2.17/ld/testsuite/ld-elf/exclude.exp
new file mode 100644
index 00000000..c67e048c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/exclude.exp
@@ -0,0 +1,137 @@
+# Expect script for --exclude-libs tests
+# Copyright 2004 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# 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
+}
+
+catch "exec rm -f tmpdir/libexclude.a" catch_output
+catch "exec $ar cq tmpdir/libexclude.a tmpdir/exclude2.o" catch_output
+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.17/ld/testsuite/ld-elf/exclude1.s b/binutils-2.17/ld/testsuite/ld-elf/exclude1.s
new file mode 100644
index 00000000..99efc7e9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/exclude2.s b/binutils-2.17/ld/testsuite/ld-elf/exclude2.s
new file mode 100644
index 00000000..e9b5819d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/exclude2.s
@@ -0,0 +1,4 @@
+ .globl exclude_sym
+ .data
+exclude_sym:
+ .long 0
diff --git a/binutils-2.17/ld/testsuite/ld-elf/fini.c b/binutils-2.17/ld/testsuite/ld-elf/fini.c
new file mode 100644
index 00000000..cb606553
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/fini.out b/binutils-2.17/ld/testsuite/ld-elf/fini.out
new file mode 100644
index 00000000..2bab6e67
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/fini.out
@@ -0,0 +1,3 @@
+fini array 2
+fini array 1
+fini array 0
diff --git a/binutils-2.17/ld/testsuite/ld-elf/frame.exp b/binutils-2.17/ld/testsuite/ld-elf/frame.exp
new file mode 100644
index 00000000..6b8d3e20
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/frame.exp
@@ -0,0 +1,79 @@
+# Expect script for common symbol tests
+# Copyright 2004 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-elf/frame.s b/binutils-2.17/ld/testsuite/ld-elf/frame.s
new file mode 100644
index 00000000..c7522636
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/frame.s
@@ -0,0 +1,2 @@
+ .section .eh_frame,"a",%progbits
+ .4byte 0
diff --git a/binutils-2.17/ld/testsuite/ld-elf/group.ld b/binutils-2.17/ld/testsuite/ld-elf/group.ld
new file mode 100644
index 00000000..d6b27d04
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/group.ld
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ . = 0x1000;
+ .text : { *(.text) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elf/group1.d b/binutils-2.17/ld/testsuite/ld-elf/group1.d
new file mode 100644
index 00000000..0d659325
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/group1.d
@@ -0,0 +1,10 @@
+#source: group1a.s
+#source: group1b.s
+#ld: -T group.ld
+#readelf: -s
+#xfail: "arc-*-*" "d30v-*-*" "dlx-*-*" "i960-*-*" "or32-*-*" "pj-*-*"
+Symbol table '.symtab' contains .* entries:
+#...
+ .*: 0[0]*1000 0 (NOTYPE|OBJECT) WEAK DEFAULT . foo
+ .*: 0[0]*0000 0 (NOTYPE|OBJECT) GLOBAL DEFAULT UND bar
+#...
diff --git a/binutils-2.17/ld/testsuite/ld-elf/group1a.s b/binutils-2.17/ld/testsuite/ld-elf/group1a.s
new file mode 100644
index 00000000..296e76ee
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/group1b.s b/binutils-2.17/ld/testsuite/ld-elf/group1b.s
new file mode 100644
index 00000000..b66cba94
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/group2.d b/binutils-2.17/ld/testsuite/ld-elf/group2.d
new file mode 100644
index 00000000..b4d0b819
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/group2.d
@@ -0,0 +1,16 @@
+#source: ../../../binutils/testsuite/binutils-all/group.s
+#ld: -r
+#readelf: -Sg --wide
+
+#...
+ \[[ 0-9]+\] foo_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]+\] `foo_group' \[foo_group\] contains 2 sections:
+ \[Index\] Name
+ \[[ 0-9]+\] .text.*
+ \[[ 0-9]+\] .data.*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-elf/init.c b/binutils-2.17/ld/testsuite/ld-elf/init.c
new file mode 100644
index 00000000..3b1ffb1f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/init.out b/binutils-2.17/ld/testsuite/ld-elf/init.out
new file mode 100644
index 00000000..f988b84c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/init.out
@@ -0,0 +1,3 @@
+init array 0
+init array 1
+init array 2
diff --git a/binutils-2.17/ld/testsuite/ld-elf/merge.d b/binutils-2.17/ld/testsuite/ld-elf/merge.d
new file mode 100644
index 00000000..12b84586
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/merge.d
@@ -0,0 +1,16 @@
+#source: merge.s
+#ld: -T merge.ld
+#objdump: -s
+#xfail: "arc-*-*" "avr-*-*" "bfin-*-*" "cris*-*-*" "crx-*-*" "d10v-*-*" "d30v-*-*"
+#xfail: "dlx-*-*" "fr30-*-*" "frv-*-*" "hppa*-*-*" "h8300-*-*"
+#xfail: "i370-*-*" "i860-*-*" "i960-*-*" "ip2k-*-*" "iq2000-*-*"
+#xfail: "mcore-*-*" "mn102*-*-*" "mips*-*-*" "ms1-*-*" "msp430-*-*"
+#xfail: "or32-*-*" "pj-*-*" "sparc*-*-*" "vax-*-*" "xstormy16-*-*" "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.17/ld/testsuite/ld-elf/merge.ld b/binutils-2.17/ld/testsuite/ld-elf/merge.ld
new file mode 100644
index 00000000..dce91bb4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/merge.s b/binutils-2.17/ld/testsuite/ld-elf/merge.s
new file mode 100644
index 00000000..1e6e0e34
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/merge2.d b/binutils-2.17/ld/testsuite/ld-elf/merge2.d
new file mode 100644
index 00000000..40884a39
--- /dev/null
+++ b/binutils-2.17/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-*-*" "iq2000-*-*" "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.17/ld/testsuite/ld-elf/merge2.s b/binutils-2.17/ld/testsuite/ld-elf/merge2.s
new file mode 100644
index 00000000..41d066ab
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/orphan.d b/binutils-2.17/ld/testsuite/ld-elf/orphan.d
new file mode 100644
index 00000000..04d935c1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/orphan.d
@@ -0,0 +1,12 @@
+#source: orphan.s
+#ld: -T orphan.ld
+#readelf: -S --wide
+
+#...
+ \[[ 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.17/ld/testsuite/ld-elf/orphan.ld b/binutils-2.17/ld/testsuite/ld-elf/orphan.ld
new file mode 100644
index 00000000..8ce83f16
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/orphan.ld
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ .text : { *(.text) }
+ .data : { *(.data) }
+ .bss : { *(.bss) *(COMMON) }
+ .note : { *(.note) }
+ .reginfo : { *(.reginfo) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elf/orphan.s b/binutils-2.17/ld/testsuite/ld-elf/orphan.s
new file mode 100644
index 00000000..d46f21d8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/orphan2.d b/binutils-2.17/ld/testsuite/ld-elf/orphan2.d
new file mode 100644
index 00000000..867a4a92
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/orphan2.d
@@ -0,0 +1,8 @@
+#source: orphan2.s
+#ld: -r
+#readelf: -S --wide
+
+#...
+ \[[ 0-9]+\] \.text[ \t]+PROGBITS[ \t0-9a-f]+AX?.*
+ \[[ 0-9]+\] \.modinfo[ \t]+PROGBITS[ \t0-9a-f]+A.*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-elf/orphan2.s b/binutils-2.17/ld/testsuite/ld-elf/orphan2.s
new file mode 100644
index 00000000..bed8dcd9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/orphan2.s
@@ -0,0 +1,4 @@
+ .text
+ .long 0
+ .section .modinfo,"a","progbits"
+ .long 0
diff --git a/binutils-2.17/ld/testsuite/ld-elf/preinit.c b/binutils-2.17/ld/testsuite/ld-elf/preinit.c
new file mode 100644
index 00000000..9ef2a89c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/preinit.out b/binutils-2.17/ld/testsuite/ld-elf/preinit.out
new file mode 100644
index 00000000..6a30bc6d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/preinit.out
@@ -0,0 +1,3 @@
+preinit array 0
+preinit array 1
+preinit array 2
diff --git a/binutils-2.17/ld/testsuite/ld-elf/sec64k.exp b/binutils-2.17/ld/testsuite/ld-elf/sec64k.exp
new file mode 100644
index 00000000..bd66c1c5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/sec64k.exp
@@ -0,0 +1,153 @@
+# Expect script for tests for >64k sections
+# Copyright 2002, 2003 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Written by Hans-Peter Nilsson (hp@axis.com)
+#
+
+# Exclude non-ELF targets.
+
+if ![is_elf_format] {
+ 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 " .global __start"
+ puts $ofd "_start:"
+ puts $ofd "__start:"
+ puts $ofd " .global foo_0"
+ puts $ofd "foo_0: .long 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"
+ puts $ofd " .section .foo.\\secn,\"ax\""
+ puts $ofd " .global foo_\\secn"
+ puts $ofd "foo_\\secn:"
+ puts $ofd " .long foo_\\secp"
+ puts $ofd "bar_\\secn:"
+ puts $ofd " .long bar_\\secn"
+ puts $ofd " .endm"
+ puts $ofd " secn = [expr $i * $secs_per_file]"
+ puts $ofd " .rept $secs_per_file"
+ puts $ofd " 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.
+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\\\] .* 682\[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 " \\\[65536\\\] (.rel\[a\]?)?\\.foo\\.\[0-9\]+ .*"
+puts $ofd "#..."
+puts $ofd " 680..: 0+\[ \]+0\[ \]+SECTION\[ \]+LOCAL\[ \]+DEFAULT\[ \]+68... "
+puts $ofd "#..."
+puts $ofd " 680..: 0+4\[ \]+0\[ \]+NOTYPE\[ \]+LOCAL\[ \]+DEFAULT\[ \]+\[23\] 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
+}
+foreach sfile $sfiles { puts $ofd "#source: $sfile" }
+puts $ofd "#ld:"
+puts $ofd "#readelf: -W -Ss"
+puts $ofd "There are 660.. section headers.*:"
+puts $ofd "#..."
+puts $ofd " \\\[ 0\\\] .* 662..\[ \]+0\[ \]+0"
+puts $ofd "#..."
+puts $ofd " \\\[65279\\\] \\.foo\\.\[0-9\]+ .*"
+puts $ofd " \\\[65536\\\] \\.foo\\.\[0-9\]+ .*"
+puts $ofd "#..."
+puts $ofd " 660..: 0+\[ \]+0\[ \]+SECTION\[ \]+LOCAL\[ \]+DEFAULT\[ \]+662.. "
+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.17/ld/testsuite/ld-elf/start.s b/binutils-2.17/ld/testsuite/ld-elf/start.s
new file mode 100644
index 00000000..9cbf231a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/start.s
@@ -0,0 +1,10 @@
+ .text
+ .global _start
+_start:
+ .global __start
+__start:
+ .global start /* Used by SH targets. */
+start:
+ .global main /* Used by HPPA targets. */
+main:
+ .long 0
diff --git a/binutils-2.17/ld/testsuite/ld-elf/symbol1ref.s b/binutils-2.17/ld/testsuite/ld-elf/symbol1ref.s
new file mode 100644
index 00000000..582e6ba1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/symbol1ref.s
@@ -0,0 +1,3 @@
+ .text
+ .long symbol1
+
diff --git a/binutils-2.17/ld/testsuite/ld-elf/symbol1w.s b/binutils-2.17/ld/testsuite/ld-elf/symbol1w.s
new file mode 100644
index 00000000..38778d3e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/table.s b/binutils-2.17/ld/testsuite/ld-elf/table.s
new file mode 100644
index 00000000..2b13f70e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elf/table.s
@@ -0,0 +1 @@
+ .section .gcc_except_table,"a",%progbits
diff --git a/binutils-2.17/ld/testsuite/ld-elf/tbss.s b/binutils-2.17/ld/testsuite/ld-elf/tbss.s
new file mode 100644
index 00000000..cc43340d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/unknown.d b/binutils-2.17/ld/testsuite/ld-elf/unknown.d
new file mode 100644
index 00000000..636e6c7e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/unknown2.d b/binutils-2.17/ld/testsuite/ld-elf/unknown2.d
new file mode 100644
index 00000000..467d5d34
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/unknown2.s b/binutils-2.17/ld/testsuite/ld-elf/unknown2.s
new file mode 100644
index 00000000..8592820f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elf/warn1.d b/binutils-2.17/ld/testsuite/ld-elf/warn1.d
new file mode 100644
index 00000000..7beb9dae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfcomm/common1a.c b/binutils-2.17/ld/testsuite/ld-elfcomm/common1a.c
new file mode 100644
index 00000000..eb8fbef5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfcomm/common1b.c b/binutils-2.17/ld/testsuite/ld-elfcomm/common1b.c
new file mode 100644
index 00000000..4ed9e039
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfcomm/common1b.c
@@ -0,0 +1,3 @@
+static char dummy1 = 'X';
+char foo1 [] = "Aligned at odd byte.";
+char foo2 [4];
diff --git a/binutils-2.17/ld/testsuite/ld-elfcomm/elfcomm.exp b/binutils-2.17/ld/testsuite/ld-elfcomm/elfcomm.exp
new file mode 100644
index 00000000..5b3db498
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfcomm/elfcomm.exp
@@ -0,0 +1,103 @@
+# Expect script for common symbol tests
+# Copyright 2003, 2005 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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
+}
+
+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 { [which $CC] == 0 } {
+ untested $test1w1
+ untested $test1w2
+ untested $test1c1
+ untested $test1c2
+ return
+}
+
+proc dump_common1 { testname } {
+ global exec_output
+ global READELF
+
+ send_log "$READELF -s tmpdir/common1.o | grep foo\n"
+ catch "exec $READELF -s tmpdir/common1.o | grep foo" exec_output
+ if { ![regexp "(\[ \]*)(\[0-9\]+):(\[ \]*)(\[0\]*)80(\[ \]+)4(\[ \]+)OBJECT(\[ \]+)GLOBAL(\[ \]+)DEFAULT(\[ \]+)(PRC\\\[0xff03\\\]|COM)(\[ \]+)_?foo2" $exec_output]
+ || ![regexp "(\[ \]*)(\[0-9\]+):(\[ \]*)(\[0-9\]+)(\[ \]+)21(\[ \]+)OBJECT(\[ \]+)GLOBAL(\[ \]+)DEFAULT(\[ \]+)(\[0-9\]+)(\[ \]+)_?foo1" $exec_output] } {
+ send_log "$exec_output\n"
+ verbose $exec_output
+ fail $testname
+ return 0
+ }
+
+ return 1
+}
+
+if { ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1a.c tmpdir/common1a.o]
+ || ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1b.c tmpdir/common1b.o] } {
+ unresolved $test1
+ return
+}
+
+global ld
+global link_output
+
+if { [ld_simple_link $ld tmpdir/common1.o "-r tmpdir/common1a.o tmpdir/common1b.o"] } {
+ unresolved $test1w1
+ return
+}
+
+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] } {
+ if { [istarget mips*-*-*] } {
+ # This test fails on MIPS because the backend sets type_change_ok. The
+ # size change warning is suppressed.
+ xfail $test1w1
+ } else {
+ fail $test1w1
+ }
+} else {
+ pass $test1w1
+}
+
+if { [dump_common1 $test1c1] } {
+ pass $test1c1
+}
+
+if { [ld_simple_link $ld tmpdir/common1.o "-r tmpdir/common1b.o tmpdir/common1a.o"] } {
+ 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
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers.exp b/binutils-2.17/ld/testsuite/ld-elfvers/vers.exp
new file mode 100644
index 00000000..6bb77a7c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers.exp
@@ -0,0 +1,1001 @@
+# Expect script for ld-version tests
+# Copyright 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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" }
+ 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 $diff $tmpdir/nm.out $srcdir/$subdir/$expect" 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 order.
+
+ set f1 [open $tmpdir/objdump.out r]
+ set f2 [open $expectfile r]
+ while { [gets $f2 l2] != -1 } {
+ if { ![regexp "^#.*$" $l2] } then {
+ break
+ }
+ }
+ while { [gets $f1 l1] != -1 } {
+ if { [string match $l2 $l1] } then {
+ if { [gets $f2 l2] == -1 } then {
+ close $f1
+ close $f2
+ return 1
+ }
+ }
+ }
+
+ # We reached the end of the output without seeing the line we
+ # expected. This is a test failure.
+
+ close $f1
+ close $f2
+
+ # Support empty expected file.
+ if [string match "" $l2] then {
+ return 1
+ }
+
+ verbose -log "Did not find \"$l2\""
+ set f1 [open $tmpdir/objdump.out r]
+ while { [gets $f1 l1] != -1 } {
+ verbose -log $l1
+ }
+
+ verbose -log "$exec_output"
+ return 0
+ } 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
+
+
+#
+# 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 ""
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers1.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers1.c
new file mode 100644
index 00000000..c27bc3bc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers1.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers1.dsym
new file mode 100644
index 00000000..834434bc
--- /dev/null
+++ b/binutils-2.17/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|\*ABS\*) [0-9a-f]* \(Base\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* \(VERS_1.1\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* \(VERS_1.2\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* VERS_2.0 (0x[0-9a-f][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.17/ld/testsuite/ld-elfvers/vers1.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers1.map
new file mode 100644
index 00000000..767915cd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers1.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers1.sym
new file mode 100644
index 00000000..70ff8557
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers1.sym
@@ -0,0 +1,4 @@
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@VERS_1.1
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@VERS_1.2
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@@VERS_2.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers1.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers1.ver
new file mode 100644
index 00000000..ace685da
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers1.ver
@@ -0,0 +1,8 @@
+Version definitions:
+1 0x01 0x0c96425f vers1.so
+2 0x00 0x0a7927b1 VERS_1.1
+3 0x00 0x0a7927b2 VERS_1.2
+ VERS_1.1
+4 0x00 0x0a7922b0 VERS_2.0
+ VERS_1.2
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers13.asym b/binutils-2.17/ld/testsuite/ld-elfvers/vers13.asym
new file mode 100644
index 00000000..d446144e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers15.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers15.c
new file mode 100644
index 00000000..4e22cac0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers15.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers15.dsym
new file mode 100644
index 00000000..1f5e15c4
--- /dev/null
+++ b/binutils-2.17/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|\*ABS\*) [0-9a-f]* \(Base\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* \(VERS_1.1\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* VERS_1.2 (0x[0-9a-f][0-9a-f] )?show_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers15.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers15.sym
new file mode 100644
index 00000000..87bab62c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers15.sym
@@ -0,0 +1,3 @@
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@VERS_1.1
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@@VERS_1.2
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers15.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers15.ver
new file mode 100644
index 00000000..f60021e0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers15.ver
@@ -0,0 +1,5 @@
+Version definitions:
+1 0x01 0x07cc9645 vers15
+2 0x00 0x0a7927b2 VERS_1.2
+3 0x00 0x0a7927b1 VERS_1.1
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers16.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers16.c
new file mode 100644
index 00000000..6668bc60
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers16.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers16.dsym
new file mode 100644
index 00000000..6c424c31
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers16.dsym
@@ -0,0 +1,2 @@
+[0-9a-f]* g DF (\.text|\*ABS\*) [0-9a-f]*( Base )? (0x[0-9a-f][0-9a-f] )?show_bar
+[0-9a-f]* DF \*UND\* [0-9a-f]*( )? (0x[0-9a-f][0-9a-f] )?show_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers16.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers16.map
new file mode 100644
index 00000000..766332fc
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers16.map
@@ -0,0 +1,3 @@
+VERS_1.1 {
+ global: show_bar;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers16a.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers16a.c
new file mode 100644
index 00000000..153b1fdc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers16a.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers16a.dsym
new file mode 100644
index 00000000..058df47e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers16a.dsym
@@ -0,0 +1,3 @@
+[0-9a-f]* g DO (\.text|\*ABS\*) [0-9a-f]* VERS_1\.1 VERS_1\.1
+[0-9a-f]* g DF (\.text|\*ABS\*) [0-9a-f]* VERS_1\.1 (0x[0-9a-f][0-9a-f] )?show_bar
+[0-9a-f]* g DF (\.text|\*ABS\*) [0-9a-f]* Base (0x[0-9a-f][0-9a-f] )?show_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers16a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers16a.ver
new file mode 100644
index 00000000..5b6063b1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers16a.ver
@@ -0,0 +1,3 @@
+Version definitions:
+1 0x01 0x064c090f vers16a.so
+2 0x00 0x0a7927b1 VERS_1.1
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers17.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers17.c
new file mode 100644
index 00000000..3bcd6477
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers17.c
@@ -0,0 +1,5 @@
+int
+show_foo ()
+{
+ return 99;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers17.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers17.dsym
new file mode 100644
index 00000000..8decc0af
--- /dev/null
+++ b/binutils-2.17/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|\*ABS\*) [0-9a-f]* VERS_2.0 (0x[0-9a-f][0-9a-f] )?show_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers17.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers17.map
new file mode 100644
index 00000000..a5c9cf69
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers17.map
@@ -0,0 +1,4 @@
+VERS_2.0 {
+ global:
+ show_foo;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers17.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers17.ver
new file mode 100644
index 00000000..0dad2a6d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers17.ver
@@ -0,0 +1,3 @@
+Version definitions:
+1 0x01 0x0964f95f vers17.so
+2 0x00 0x0a7922b0 VERS_2.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers18.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers18.c
new file mode 100644
index 00000000..25dcc259
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers18.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers18.dsym
new file mode 100644
index 00000000..c60237a3
--- /dev/null
+++ b/binutils-2.17/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|\*ABS\*) [0-9a-f]* \(Base\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* w DF (.text|\*ABS\*) [0-9a-f]* \(VERS_1.1\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* w DF (.text|\*ABS\*) [0-9a-f]* \(VERS_1.2\) (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* w DF (.text|\*ABS\*) [0-9a-f]* VERS_2.0 (0x[0-9a-f][0-9a-f] )?show_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers18.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers18.map
new file mode 100644
index 00000000..8dcff39b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers18.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers18.sym
new file mode 100644
index 00000000..f9cefdfa
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers18.sym
@@ -0,0 +1,4 @@
+[0-9a-f]* w F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@
+[0-9a-f]* w F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@VERS_1.1
+[0-9a-f]* w F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@VERS_1.2
+[0-9a-f]* w F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo@@VERS_2.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers18.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers18.ver
new file mode 100644
index 00000000..c6b14e8f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers18.ver
@@ -0,0 +1,7 @@
+Version definitions:
+1 0x01 0x0964e95f vers18.so
+2 0x00 0x0a7927b1 VERS_1.1
+3 0x00 0x0a7927b2 VERS_1.2
+ VERS_1.1
+4 0x00 0x0a7922b0 VERS_2.0
+ VERS_1.2
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers19.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers19.c
new file mode 100644
index 00000000..c1bf27a8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers19.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers19.dsym
new file mode 100644
index 00000000..c9c26423
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers19.dsym
@@ -0,0 +1 @@
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS_2.0 (0x[0-9a-f][0-9a-f] )?show_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers19.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers19.ver
new file mode 100644
index 00000000..28a52c48
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers2.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers2.c
new file mode 100644
index 00000000..eda54cb0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers2.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers2.dsym
new file mode 100644
index 00000000..99985c23
--- /dev/null
+++ b/binutils-2.17/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][0-9a-f] )?show_foo
+[0]* g DO \*ABS\* [0]* VERS_XXX_1.1 VERS_XXX_1.1
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* VERS_XXX_1.1 (0x[0-9a-f][0-9a-f] )?show_xyzzy
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers2.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers2.map
new file mode 100644
index 00000000..cd57d7e5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers2.map
@@ -0,0 +1,4 @@
+
+VERS_XXX_1.1 {
+ show_xyzzy;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers2.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers2.ver
new file mode 100644
index 00000000..4ca81eb3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers2.ver
@@ -0,0 +1,8 @@
+Version definitions:
+1 0x01 0x0c96525f vers2.so
+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.17/ld/testsuite/ld-elfvers/vers20.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers20.c
new file mode 100644
index 00000000..01a6ff2c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers20.c
@@ -0,0 +1 @@
+int show_foo;
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers20.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers20.dsym
new file mode 100644
index 00000000..70aa05ed
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers20.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers20.map
new file mode 100644
index 00000000..e6835650
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers20.map
@@ -0,0 +1,7 @@
+VERS_1.1 {
+ global:
+ show_foo;
+ local:
+ *;
+};
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers20.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers20.ver
new file mode 100644
index 00000000..afeb1374
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers20.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x0965695f vers20.so
+2 0x00 0x0a7927b1 VERS_1.1
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers20a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers20a.ver
new file mode 100644
index 00000000..2592f023
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers20a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x0652090f vers20a.so
+2 0x00 0x0a7927b1 VERS_1.1
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers21.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers21.c
new file mode 100644
index 00000000..2879c7f0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers21.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers21.dsym
new file mode 100644
index 00000000..2096b5d9
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+\(VERS.0\)[ ]+(0x[0-9a-f]*|)[ ]*bar
+[0-9a-f]*[ ]+g[ ]+DF[ ]+.text[ ]+[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.17/ld/testsuite/ld-elfvers/vers21.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers21.map
new file mode 100644
index 00000000..08f748a8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers21.map
@@ -0,0 +1,8 @@
+VERS.0 {
+ global:
+ bar;
+ foo;
+ foobar;
+ local:
+ *;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers21.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers21.sym
new file mode 100644
index 00000000..bcb63598
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers21.sym
@@ -0,0 +1,3 @@
+[0-9a-f]*[ ]+g[ ]+O[ ]+.s?data[ ]+[0-9a-f]* (0x[0-9a-f][0-9a-f] )?foobar@VERS.0
+[0-9a-f]*[ ]+w[ ]+F[ ]+.text[ ]+[0-9a-f]* (0x[0-9a-f][0-9a-f] )?bar@VERS.0
+[0-9a-f]*[ ]+g[ ]+F[ ]+.text[ ]+[0-9a-f]* (0x[0-9a-f][0-9a-f] )?foo@VERS.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers21.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers21.ver
new file mode 100644
index 00000000..3ba24d80
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers21.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x0965595f vers21.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers22.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers22.c
new file mode 100644
index 00000000..a04695b8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers22.c
@@ -0,0 +1,7 @@
+extern void bar ();
+
+void
+foo ()
+{
+ bar ();
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers22.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers22.dsym
new file mode 100644
index 00000000..bef7c565
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers22.dsym
@@ -0,0 +1 @@
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS.0 (0x[0-9a-f][0-9a-f] )?bar
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers22.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers22.map
new file mode 100644
index 00000000..9a03b0b9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers22.map
@@ -0,0 +1,4 @@
+VERS.0 {
+ global:
+ bar;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers22.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers22.ver
new file mode 100644
index 00000000..05afce77
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers22a.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers22a.c
new file mode 100644
index 00000000..288c8209
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers22a.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers22a.dsym
new file mode 100644
index 00000000..b710e715
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+\(VERS.0\)[ ]+(0x[0-9a-f]*|)[ ]*bar
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers22a.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers22a.sym
new file mode 100644
index 00000000..39fd10a6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers22a.sym
@@ -0,0 +1 @@
+[0-9a-f]*[ ]+g[ ]+F[ ]+.text[ ]+[0-9a-f]* (0x[0-9a-f][0-9a-f] )?bar@VERS.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers22a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers22a.ver
new file mode 100644
index 00000000..bb4d3bf0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers22a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x0660090f vers22a.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers22b.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers22b.c
new file mode 100644
index 00000000..9e559cc8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers22b.c
@@ -0,0 +1,4 @@
+void
+bar ()
+{
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers22b.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers22b.dsym
new file mode 100644
index 00000000..25d78fa2
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+VERS.0[ ]+(0x[0-9a-f]*|)[ ]*bar
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers22b.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers22b.ver
new file mode 100644
index 00000000..b1c834b4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers22b.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x065f990f vers22b.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers23.c
new file mode 100644
index 00000000..97977254
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers23.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers23.dsym
new file mode 100644
index 00000000..d800afa4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers23.dsym
@@ -0,0 +1 @@
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS.0 (0x[0-9a-f][0-9a-f] )?foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers23.ver
new file mode 100644
index 00000000..983355ba
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers23a.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.c
new file mode 100644
index 00000000..250d6f9e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers23a.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.dsym
new file mode 100644
index 00000000..c96aa2fc
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+\(VERS.0\)[ ]+(0x[0-9a-f]*|)[ ]*bar
+[0-9a-f]*[ ]+g[ ]+DF[ ]+.text[ ]+[0-9a-f]*[ ]+VERS.0[ ]+(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.map
new file mode 100644
index 00000000..325fb380
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ bar;
+ foo;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.sym
new file mode 100644
index 00000000..39fd10a6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.sym
@@ -0,0 +1 @@
+[0-9a-f]*[ ]+g[ ]+F[ ]+.text[ ]+[0-9a-f]* (0x[0-9a-f][0-9a-f] )?bar@VERS.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.ver
new file mode 100644
index 00000000..9132d2db
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers23a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x065f090f vers23a.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.c
new file mode 100644
index 00000000..299e2be6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.c
@@ -0,0 +1,4 @@
+void
+bar (void)
+{
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.dsym
new file mode 100644
index 00000000..25d78fa2
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+VERS.0[ ]+(0x[0-9a-f]*|)[ ]*bar
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.map
new file mode 100644
index 00000000..9a03b0b9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.map
@@ -0,0 +1,4 @@
+VERS.0 {
+ global:
+ bar;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.ver
new file mode 100644
index 00000000..629d2bc1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers23b.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x065e990f vers23b.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23c.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers23c.ver
new file mode 100644
index 00000000..73d77165
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers23c.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x065ea90f vers23c.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers23d.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers23d.dsym
new file mode 100644
index 00000000..b31b82b0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers24.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers24.map
new file mode 100644
index 00000000..06ea42fd
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers24.map
@@ -0,0 +1,4 @@
+VERS.0 {
+ global: x; foo;
+ local: *;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers24.rd b/binutils-2.17/ld/testsuite/ld-elfvers/vers24.rd
new file mode 100644
index 00000000..9ed8762f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers24a.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers24a.c
new file mode 100644
index 00000000..7fef8d8a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers24b.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers24b.c
new file mode 100644
index 00000000..8a18b3aa
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers24b.c
@@ -0,0 +1,5 @@
+extern int x;
+void foo (void)
+{
+ x = 24;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers24c.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers24c.c
new file mode 100644
index 00000000..267c4243
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers25a.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.c
new file mode 100644
index 00000000..f5be3717
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.c
@@ -0,0 +1 @@
+void foo () {}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.dsym
new file mode 100644
index 00000000..fcf6384d
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+VERS.0[ ]+(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.map
new file mode 100644
index 00000000..31bfc763
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ foo;
+ local: *;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.ver
new file mode 100644
index 00000000..81a71603
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers25a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x065d090f vers25a.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers25b.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers25b.c
new file mode 100644
index 00000000..b119c695
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers25b.c
@@ -0,0 +1 @@
+/* Empty file */
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers25b.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers25b.dsym
new file mode 100644
index 00000000..71923c33
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers25b.dsym
@@ -0,0 +1 @@
+# Empty file.
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers25b.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers25b.ver
new file mode 100644
index 00000000..932b7982
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers25b.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.c
new file mode 100644
index 00000000..5b5ccbf7
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.c
@@ -0,0 +1,4 @@
+void
+foo ()
+{
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.dsym
new file mode 100644
index 00000000..fcf6384d
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+VERS.0[ ]+(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.map
new file mode 100644
index 00000000..31bfc763
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ foo;
+ local: *;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.ver
new file mode 100644
index 00000000..3e67ef1a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers26a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x065c090f vers26a.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers26b.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers26b.c
new file mode 100644
index 00000000..c724c32d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers26b.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers26b.dsym
new file mode 100644
index 00000000..932b7982
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers26b.dsym
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers26b.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers26b.ver
new file mode 100644
index 00000000..932b7982
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers26b.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.c
new file mode 100644
index 00000000..f5be3717
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.c
@@ -0,0 +1 @@
+void foo () {}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.dsym
new file mode 100644
index 00000000..fcf6384d
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+VERS.0[ ]+(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.map
new file mode 100644
index 00000000..31bfc763
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ foo;
+ local: *;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.ver
new file mode 100644
index 00000000..06d85e64
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x065b090f vers27a.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27b.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers27b.c
new file mode 100644
index 00000000..7b164c48
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27b.c
@@ -0,0 +1,2 @@
+void foo () {}
+asm (".hidden foo");
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27b.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers27b.dsym
new file mode 100644
index 00000000..932b7982
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27b.dsym
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27b.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers27b.ver
new file mode 100644
index 00000000..932b7982
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27b.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27c.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers27c.c
new file mode 100644
index 00000000..b119c695
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27c.c
@@ -0,0 +1 @@
+/* Empty file */
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27c.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers27c.dsym
new file mode 100644
index 00000000..932b7982
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27c.dsym
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27c.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers27c.ver
new file mode 100644
index 00000000..932b7982
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27c.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27d.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d.dsym
new file mode 100644
index 00000000..9813d95d
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+\(VERS.0\)[ ]+(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27d.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d.sym
new file mode 100644
index 00000000..20699930
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d.sym
@@ -0,0 +1 @@
+[0-9a-f]*[ ]+g[ ]+F[ ]+.text[ ]+[0-9a-f]* (0x[0-9a-f][0-9a-f] )?foo@VERS.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27d.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d.ver
new file mode 100644
index 00000000..672c7ad2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x05ac0cff vers27d1.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27d1.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d1.c
new file mode 100644
index 00000000..3fc60b04
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d1.c
@@ -0,0 +1,6 @@
+void
+foo ()
+{
+}
+
+asm (".symver foo,foo@VERS.0");
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27d2.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d2.c
new file mode 100644
index 00000000..a98f38aa
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d2.c
@@ -0,0 +1,7 @@
+void foo ();
+
+void
+ref ()
+{
+ foo ();
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27d3.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d3.c
new file mode 100644
index 00000000..b2658809
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers27d4.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d4.dsym
new file mode 100644
index 00000000..d800afa4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d4.dsym
@@ -0,0 +1 @@
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS.0 (0x[0-9a-f][0-9a-f] )?foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers27d4.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers27d4.ver
new file mode 100644
index 00000000..12c79c98
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers28a.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers28a.c
new file mode 100644
index 00000000..f5be3717
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers28a.c
@@ -0,0 +1 @@
+void foo () {}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers28a.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers28a.dsym
new file mode 100644
index 00000000..932b7982
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers28a.dsym
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers28a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers28a.ver
new file mode 100644
index 00000000..932b7982
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers28a.ver
@@ -0,0 +1 @@
+# Empty file
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.c
new file mode 100644
index 00000000..8186782c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.c
@@ -0,0 +1,3 @@
+#pragma weak foo
+
+void foo () {}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.dsym
new file mode 100644
index 00000000..e174c91e
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+VERS.0[ ]+(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.map
new file mode 100644
index 00000000..31bfc763
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.map
@@ -0,0 +1,5 @@
+VERS.0 {
+ global:
+ foo;
+ local: *;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.ver
new file mode 100644
index 00000000..ab996151
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers28b.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x0659990f vers28b.so
+2 0x00 0x05aa7610 VERS.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers28c.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers28c.c
new file mode 100644
index 00000000..55afb6c5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers28c.c
@@ -0,0 +1,7 @@
+extern void foo ();
+
+void
+bar ()
+{
+ foo ();
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers28c.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers28c.dsym
new file mode 100644
index 00000000..37a1c437
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers28c.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers28c.ver
new file mode 100644
index 00000000..1462686f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers29.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers29.c
new file mode 100644
index 00000000..15c63a8d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers29.c
@@ -0,0 +1,5 @@
+/* Test for default versioning. */
+void show()
+{
+}
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers29.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers29.dsym
new file mode 100644
index 00000000..2e7bbdef
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers29.dsym
@@ -0,0 +1 @@
+[0-9a-f]*[ ]+g[ ]+DF[ ]+.text[ ]+[0-9a-f]*[ ]+vers29.so[ ]+(0x[0-9a-f]*|)[ ]*show
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers29.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers29.ver
new file mode 100644
index 00000000..85c05a85
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers29.ver
@@ -0,0 +1,3 @@
+Version definitions:
+1 0x01 0x0965d95f vers29.so
+2 0x00 0x0965d95f vers29.so
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers3.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers3.c
new file mode 100644
index 00000000..dbb4dafe
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers3.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers3.dsym
new file mode 100644
index 00000000..c9c26423
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers3.dsym
@@ -0,0 +1 @@
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS_2.0 (0x[0-9a-f][0-9a-f] )?show_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers3.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers3.ver
new file mode 100644
index 00000000..41dad481
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers30.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers30.c
new file mode 100644
index 00000000..65dba2f3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers30.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers30.dsym
new file mode 100644
index 00000000..1f358d43
--- /dev/null
+++ b/binutils-2.17/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|\*ABS\*) [0-9a-f]* VERS_30.0 global
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* VERS_30.0 foo
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* VERS_30.0 info
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* VERS_30.0 extern
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers30.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers30.map
new file mode 100644
index 00000000..71d06d30
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers30.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers30.ver
new file mode 100644
index 00000000..dfcf0dac
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers30.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x0966695f vers30.so
+2 0x00 0x079239b0 VERS_30.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers31.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers31.c
new file mode 100644
index 00000000..78d3927c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers31.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers31.dsym
new file mode 100644
index 00000000..8924ed8e
--- /dev/null
+++ b/binutils-2.17/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|\*ABS\*) [0-9a-f]* VERS_31.0 _Z1fIA3_icEvPT_T0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers31.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers31.map
new file mode 100644
index 00000000..e2d4baf8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers31.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers31.ver
new file mode 100644
index 00000000..b79a5ab9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers31.ver
@@ -0,0 +1,3 @@
+Version definitions:
+1 0x01 0x0966595f vers31.so
+2 0x00 0x07923ab0 VERS_31.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers4.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers4.c
new file mode 100644
index 00000000..453f2eb4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers4.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers4.sym
new file mode 100644
index 00000000..7449446e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers4.sym
@@ -0,0 +1 @@
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?foo@@VERS_2.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers4a.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers4a.dsym
new file mode 100644
index 00000000..f7f9fdac
--- /dev/null
+++ b/binutils-2.17/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|\*ABS\*) [0-9a-f]* VERS_2.0 (0x[0-9a-f][0-9a-f] )?foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers4a.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers4a.sym
new file mode 100644
index 00000000..7449446e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers4a.sym
@@ -0,0 +1 @@
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?foo@@VERS_2.0
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers4a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers4a.ver
new file mode 100644
index 00000000..41ee241e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers4a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x07cc96a1 vers4a
+2 0x00 0x0a7922b0 VERS_2.0
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers5.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers5.c
new file mode 100644
index 00000000..cc6ea40b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers6.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers6.c
new file mode 100644
index 00000000..9e48df9b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers6.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers6.dsym
new file mode 100644
index 00000000..7e851d45
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers6.dsym
@@ -0,0 +1,4 @@
+[0-9a-f]* DF \*UND\* [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS_2.0 (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS_1.2 (0x[0-9a-f][0-9a-f] )?show_foo
+[0-9a-f]* DF \*UND\* [0-9a-f]* VERS_1.1 (0x[0-9a-f][0-9a-f] )?show_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers6.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers6.sym
new file mode 100644
index 00000000..d7b5cc75
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers6.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers6.ver
new file mode 100644
index 00000000..48a2b465
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers7.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers7.c
new file mode 100644
index 00000000..54316c92
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers7.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers7.map
new file mode 100644
index 00000000..65fd501d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers7.map
@@ -0,0 +1,6 @@
+VERS_1 {
+ global:
+ show_b ;
+ local:
+ hide_a;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers7a.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers7a.c
new file mode 100644
index 00000000..7bee8c70
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers7a.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers7a.dsym
new file mode 100644
index 00000000..06696c75
--- /dev/null
+++ b/binutils-2.17/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|\*ABS\*) [0-9a-f]* VERS_1 (0x[0-9a-f][0-9a-f] )?show_b
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers7a.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers7a.sym
new file mode 100644
index 00000000..b99bd61c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers7a.sym
@@ -0,0 +1,2 @@
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?hide_a@@VERS_1
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?show_b@@VERS_1
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers7a.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers7a.ver
new file mode 100644
index 00000000..7b3bf0a9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers7a.ver
@@ -0,0 +1,4 @@
+Version definitions:
+1 0x01 0x096d595f vers7a.so
+2 0x00 0x05aa7921 VERS_1
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers8.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers8.c
new file mode 100644
index 00000000..a14586cb
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers8.c
@@ -0,0 +1,5 @@
+int
+main()
+{
+ return a(1) + b(1);
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers8.map b/binutils-2.17/ld/testsuite/ld-elfvers/vers8.map
new file mode 100644
index 00000000..c24fb107
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers8.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers8.ver
new file mode 100644
index 00000000..a4b5296f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers8.ver
@@ -0,0 +1,8 @@
+Version definitions:
+1 0x01 0x0c96b25f vers8.so
+2 0x00 0x0a7927b1 VERS_1.1
+3 0x00 0x0a7927b2 VERS_1.2
+ VERS_1.1
+4 0x00 0x0a7922b0 VERS_2.0
+ VERS_1.2
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers9.c b/binutils-2.17/ld/testsuite/ld-elfvers/vers9.c
new file mode 100644
index 00000000..bef1402d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvers/vers9.dsym b/binutils-2.17/ld/testsuite/ld-elfvers/vers9.dsym
new file mode 100644
index 00000000..97930025
--- /dev/null
+++ b/binutils-2.17/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|\*ABS\*) [0-9a-f]* \(VERS_1.1\) (0x[0-9a-f][0-9a-f] )?foo
+[0-9a-f]* g DF (.text|\*ABS\*) [0-9a-f]* VERS_1.2 (0x[0-9a-f][0-9a-f] )?foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers9.sym b/binutils-2.17/ld/testsuite/ld-elfvers/vers9.sym
new file mode 100644
index 00000000..8231516b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers9.sym
@@ -0,0 +1,4 @@
+[0]* *F? *\*UND\* [0]* foo@VERS_1.2
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?foo@
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?foo@VERS_1.1
+[0-9a-f]* g F .text [0-9a-f]* (0x[0-9a-f][0-9a-f] )?foo@@VERS_1.2
diff --git a/binutils-2.17/ld/testsuite/ld-elfvers/vers9.ver b/binutils-2.17/ld/testsuite/ld-elfvers/vers9.ver
new file mode 100644
index 00000000..cc736912
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvers/vers9.ver
@@ -0,0 +1,5 @@
+Version definitions:
+1 0x01 0x007cc969 vers9
+2 0x00 0x0a7927b1 VERS_1.1
+3 0x00 0x0a7927b2 VERS_1.2
+
diff --git a/binutils-2.17/ld/testsuite/ld-elfvsb/common.c b/binutils-2.17/ld/testsuite/ld-elfvsb/common.c
new file mode 100644
index 00000000..7d05eb7f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/define.s b/binutils-2.17/ld/testsuite/ld-elfvsb/define.s
new file mode 100644
index 00000000..b38e3e0c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/elf-offset.ld b/binutils-2.17/ld/testsuite/ld-elfvsb/elf-offset.ld
new file mode 100644
index 00000000..7c648247
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/elfvsb.dat b/binutils-2.17/ld/testsuite/ld-elfvsb/elfvsb.dat
new file mode 100644
index 00000000..bad3b1ec
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/elfvsb.exp b/binutils-2.17/ld/testsuite/ld-elfvsb/elfvsb.exp
new file mode 100644
index 00000000..41834f15
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvsb/elfvsb.exp
@@ -0,0 +1,472 @@
+# Expect script for ld-visibility tests
+# Copyright 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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 ""
+
+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
+}
+
+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
+
+ 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*"
+ }
+
+ 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*"
+ }
+
+ 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 $picflag" $srcdir/$subdir/sh1.c $tmpdir/sh1p.o]
+ || ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG $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 $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*"
+ }
+
+ 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 $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.17/ld/testsuite/ld-elfvsb/hidden0.d b/binutils-2.17/ld/testsuite/ld-elfvsb/hidden0.d
new file mode 100644
index 00000000..46fc6475
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvsb/hidden0.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 HIDDEN . hidden
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-elfvsb/hidden1.d b/binutils-2.17/ld/testsuite/ld-elfvsb/hidden1.d
new file mode 100644
index 00000000..667f1088
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvsb/hidden1.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 HIDDEN UND hidden
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.d b/binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.d
new file mode 100644
index 00000000..14b0b30c
--- /dev/null
+++ b/binutils-2.17/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 HIDDEN +ABS foo
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.ld b/binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.ld
new file mode 100644
index 00000000..3c414dba
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.ld
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ . = 0x1000;
+ PROVIDE (foo = .);
+ .data : { *(.data) }
+ .dynamic : { *(.dynamic) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.s b/binutils-2.17/ld/testsuite/ld-elfvsb/hidden2.s
new file mode 100644
index 00000000..62f11070
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/internal0.d b/binutils-2.17/ld/testsuite/ld-elfvsb/internal0.d
new file mode 100644
index 00000000..a42ae02f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/internal1.d b/binutils-2.17/ld/testsuite/ld-elfvsb/internal1.d
new file mode 100644
index 00000000..c110ac62
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/main.c b/binutils-2.17/ld/testsuite/ld-elfvsb/main.c
new file mode 100644
index 00000000..b498d434
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/protected0.d b/binutils-2.17/ld/testsuite/ld-elfvsb/protected0.d
new file mode 100644
index 00000000..48b7885e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/protected1.d b/binutils-2.17/ld/testsuite/ld-elfvsb/protected1.d
new file mode 100644
index 00000000..2f4931ae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/sh1.c b/binutils-2.17/ld/testsuite/ld-elfvsb/sh1.c
new file mode 100644
index 00000000..8d9fcdbd
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvsb/sh1.c
@@ -0,0 +1,407 @@
+#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
+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 ();
+}
+
+int
+shlib_overriddencall2 ()
+{
+ return 7;
+}
+#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
+int shared_data = 100;
+
+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.17/ld/testsuite/ld-elfvsb/sh2.c b/binutils-2.17/ld/testsuite/ld-elfvsb/sh2.c
new file mode 100644
index 00000000..ef6b2f16
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvsb/sh2.c
@@ -0,0 +1,46 @@
+/* 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
diff --git a/binutils-2.17/ld/testsuite/ld-elfvsb/sh3.c b/binutils-2.17/ld/testsuite/ld-elfvsb/sh3.c
new file mode 100644
index 00000000..a6d5dc88
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/test.c b/binutils-2.17/ld/testsuite/ld-elfvsb/test.c
new file mode 100644
index 00000000..ca23d38b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfvsb/undef.s b/binutils-2.17/ld/testsuite/ld-elfvsb/undef.s
new file mode 100644
index 00000000..5b99d6f6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfvsb/undef.s
@@ -0,0 +1,3 @@
+ .protected protected
+ .hidden hidden
+ .internal internal
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/bar.c b/binutils-2.17/ld/testsuite/ld-elfweak/bar.c
new file mode 100644
index 00000000..63175188
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/bar1a.c b/binutils-2.17/ld/testsuite/ld-elfweak/bar1a.c
new file mode 100644
index 00000000..daf0c58b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/bar1b.c b/binutils-2.17/ld/testsuite/ld-elfweak/bar1b.c
new file mode 100644
index 00000000..bab68ab2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/bar1b.c
@@ -0,0 +1,7 @@
+int deallocate_foo = 0;
+
+int *
+bar()
+{
+ return &deallocate_foo;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/bar1c.c b/binutils-2.17/ld/testsuite/ld-elfweak/bar1c.c
new file mode 100644
index 00000000..901f0651
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/bar1c.c
@@ -0,0 +1,7 @@
+int deallocate_foo;
+
+int *
+bar()
+{
+ return &deallocate_foo;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/dso.dsym b/binutils-2.17/ld/testsuite/ld-elfweak/dso.dsym
new file mode 100644
index 00000000..be1b1865
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/dso.dsym
@@ -0,0 +1 @@
+[0-9a-f]*[ ]+g[ ]+DF[ ]+.text[ ]+[0-9a-f]*[ ]+(Base[ ]+|[ ]*)(0x[0-9a-f]+|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/dsodata.dsym b/binutils-2.17/ld/testsuite/ld-elfweak/dsodata.dsym
new file mode 100644
index 00000000..2b1f9343
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+(Base[ ]+|[ ]*)(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/dsow.dsym b/binutils-2.17/ld/testsuite/ld-elfweak/dsow.dsym
new file mode 100644
index 00000000..cc36c6f3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/dsow.dsym
@@ -0,0 +1 @@
+[0-9a-f]*[ ]+w[ ]+DF[ ]+.text[ ]+[0-9a-f]*[ ]+(Base[ ]+|[ ]*)(0x[0-9a-f]+|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/dsowdata.dsym b/binutils-2.17/ld/testsuite/ld-elfweak/dsowdata.dsym
new file mode 100644
index 00000000..e0f579ae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/elfweak.exp b/binutils-2.17/ld/testsuite/ld-elfweak/elfweak.exp
new file mode 100644
index 00000000..e1ba3a5a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/elfweak.exp
@@ -0,0 +1,498 @@
+# Expect script for ld-weak tests
+# Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-elfweak/foo.c b/binutils-2.17/ld/testsuite/ld-elfweak/foo.c
new file mode 100644
index 00000000..d00b1b5a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/foo.c
@@ -0,0 +1,8 @@
+#pragma weak foo
+
+extern void foo ();
+
+void
+foo ()
+{
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/foo1a.c b/binutils-2.17/ld/testsuite/ld-elfweak/foo1a.c
new file mode 100644
index 00000000..a653020c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/foo1a.c
@@ -0,0 +1,7 @@
+int deallocate_foo = 0;
+
+int *
+foo ()
+{
+ return &deallocate_foo;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/foo1b.c b/binutils-2.17/ld/testsuite/ld-elfweak/foo1b.c
new file mode 100644
index 00000000..d71a635e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/foo1b.c
@@ -0,0 +1,7 @@
+int deallocate_foo;
+
+int *
+foo ()
+{
+ return &deallocate_foo;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/main.c b/binutils-2.17/ld/testsuite/ld-elfweak/main.c
new file mode 100644
index 00000000..5ea170c8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/main1.c b/binutils-2.17/ld/testsuite/ld-elfweak/main1.c
new file mode 100644
index 00000000..39f819eb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/size.dat b/binutils-2.17/ld/testsuite/ld-elfweak/size.dat
new file mode 100644
index 00000000..01e79c32
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/size.dat
@@ -0,0 +1,3 @@
+1
+2
+3
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/size2.d b/binutils-2.17/ld/testsuite/ld-elfweak/size2.d
new file mode 100644
index 00000000..4468dda2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/size2a.s b/binutils-2.17/ld/testsuite/ld-elfweak/size2a.s
new file mode 100644
index 00000000..c9ad9146
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/size2b.s b/binutils-2.17/ld/testsuite/ld-elfweak/size2b.s
new file mode 100644
index 00000000..946c8384
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/size_bar.c b/binutils-2.17/ld/testsuite/ld-elfweak/size_bar.c
new file mode 100644
index 00000000..7f32890c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/size_foo.c b/binutils-2.17/ld/testsuite/ld-elfweak/size_foo.c
new file mode 100644
index 00000000..f7a605a4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-elfweak/size_main.c b/binutils-2.17/ld/testsuite/ld-elfweak/size_main.c
new file mode 100644
index 00000000..2cee0a94
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/size_main.c
@@ -0,0 +1,8 @@
+extern void foo ();
+
+int
+main ()
+{
+ foo ();
+ return 0;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/strong.dat b/binutils-2.17/ld/testsuite/ld-elfweak/strong.dat
new file mode 100644
index 00000000..13693db3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/strong.dat
@@ -0,0 +1 @@
+strong foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/strong.sym b/binutils-2.17/ld/testsuite/ld-elfweak/strong.sym
new file mode 100644
index 00000000..85e06f77
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/strong.sym
@@ -0,0 +1 @@
+[0-9a-f]*[ ]+g[ ]+F[ ]+.text[ ]+[0-9a-f]*[ ]+(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/strongcomm.sym b/binutils-2.17/ld/testsuite/ld-elfweak/strongcomm.sym
new file mode 100644
index 00000000..c0ae4014
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/strongdata.dat b/binutils-2.17/ld/testsuite/ld-elfweak/strongdata.dat
new file mode 100644
index 00000000..8232e85a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/strongdata.dat
@@ -0,0 +1 @@
+strong deallocate_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/strongdata.sym b/binutils-2.17/ld/testsuite/ld-elfweak/strongdata.sym
new file mode 100644
index 00000000..9b94377c
--- /dev/null
+++ b/binutils-2.17/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[ ]+[0-9a-f]*[ ]+(0x[0-9a-f]*|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/weak.dat b/binutils-2.17/ld/testsuite/ld-elfweak/weak.dat
new file mode 100644
index 00000000..0b54d974
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/weak.dat
@@ -0,0 +1 @@
+weak foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/weak.dsym b/binutils-2.17/ld/testsuite/ld-elfweak/weak.dsym
new file mode 100644
index 00000000..cc36c6f3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/weak.dsym
@@ -0,0 +1 @@
+[0-9a-f]*[ ]+w[ ]+DF[ ]+.text[ ]+[0-9a-f]*[ ]+(Base[ ]+|[ ]*)(0x[0-9a-f]+|)[ ]*foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/weakdata.dat b/binutils-2.17/ld/testsuite/ld-elfweak/weakdata.dat
new file mode 100644
index 00000000..96668fad
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-elfweak/weakdata.dat
@@ -0,0 +1 @@
+weak deallocate_foo
diff --git a/binutils-2.17/ld/testsuite/ld-elfweak/weakdata.dsym b/binutils-2.17/ld/testsuite/ld-elfweak/weakdata.dsym
new file mode 100644
index 00000000..e0f579ae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-fastcall/export.s b/binutils-2.17/ld/testsuite/ld-fastcall/export.s
new file mode 100644
index 00000000..d8df66dd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-fastcall/fastcall.exp b/binutils-2.17/ld/testsuite/ld-fastcall/fastcall.exp
new file mode 100644
index 00000000..5f2e87e5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-fastcall/fastcall.exp
@@ -0,0 +1,48 @@
+# Test that the linker can handle fastcall symbols correctly.
+# Copyright 2002 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+set testname "ld (fastcall symbols)"
+
+if {![istarget "i*86-*-*"]} {
+ return
+}
+
+if { !([istarget "i*86-*-*pe*"] && ![istarget "i*86-*-opensd*"]) \
+ && ![istarget "i*86-*-cygwin*"] \
+ && ![istarget "i*86-*-mingw32*"] } {
+ 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.17/ld/testsuite/ld-fastcall/import.s b/binutils-2.17/ld/testsuite/ld-fastcall/import.s
new file mode 100644
index 00000000..e33918b4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-fastcall/import.s
@@ -0,0 +1,4 @@
+ .text
+.globl _start
+_start:
+ call @extern_fastcall_function@0
diff --git a/binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-1.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-1.d
new file mode 100644
index 00000000..0e373246
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-pie-2.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-2.d
new file mode 100644
index 00000000..3583a3b9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-pie-5.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-5.d
new file mode 100644
index 00000000..8565024c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-pie-6-fail.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-6-fail.d
new file mode 100644
index 00000000..b7e93ae6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-pie-6.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-6.d
new file mode 100644
index 00000000..7bdda5df
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-pie-7.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-7.d
new file mode 100644
index 00000000..7ebd0b70
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-pie-8.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-pie-8.d
new file mode 100644
index 00000000..0de4a811
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-1.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-1.d
new file mode 100644
index 00000000..7f88e184
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-2-fail.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-2-fail.d
new file mode 100644
index 00000000..0cec4f6c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-2.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-2.d
new file mode 100644
index 00000000..cb4b68da
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-3.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-3.d
new file mode 100644
index 00000000..fceb16a9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-4.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-4.d
new file mode 100644
index 00000000..40455622
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-5.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-5.d
new file mode 100644
index 00000000..009c62ca
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-6-fail.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-6-fail.d
new file mode 100644
index 00000000..23a245b2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-6.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-6.d
new file mode 100644
index 00000000..aefa4d29
--- /dev/null
+++ b/binutils-2.17/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 98 sdiv\.p gr0,gr24,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF9
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 03 90 sdiv\.p gr0,gr16,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF8
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 03 88 sdiv\.p gr0,gr8,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF0
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+[0-9a-f ]+: 00 00 03 80 sdiv\.p gr0,gr0,gr0
+[0-9a-f ]+: R_FRV_FUNCDESC_VALUE WF7
+[0-9a-f ]+: 00 00 00 00 add\.p gr0,gr0,gr0
+
+[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.17/ld/testsuite/ld-frv/fdpic-shared-7.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-7.d
new file mode 100644
index 00000000..2004a845
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-8-fail.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-8-fail.d
new file mode 100644
index 00000000..5634040b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-8.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-8.d
new file mode 100644
index 00000000..543d3136
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-local-2.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-local-2.d
new file mode 100644
index 00000000..51ca1268
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-shared-local-8.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-shared-local-8.d
new file mode 100644
index 00000000..8d2c67eb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-static-1.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-static-1.d
new file mode 100644
index 00000000..1c4dce1d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-static-2.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-static-2.d
new file mode 100644
index 00000000..d2b794f3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-static-5.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-static-5.d
new file mode 100644
index 00000000..ce687b8f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-static-6.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-static-6.d
new file mode 100644
index 00000000..491b7c7f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-static-7.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-static-7.d
new file mode 100644
index 00000000..6f8313cb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic-static-8.d b/binutils-2.17/ld/testsuite/ld-frv/fdpic-static-8.d
new file mode 100644
index 00000000..c0cc7328
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic.exp b/binutils-2.17/ld/testsuite/ld-frv/fdpic.exp
new file mode 100644
index 00000000..1e191abc
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/fdpic.exp
@@ -0,0 +1,66 @@
+# Expect script for FRV FDPIC linker tests
+# Copyright 2003, 2004, 2005 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+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.17/ld/testsuite/ld-frv/fdpic1.s b/binutils-2.17/ld/testsuite/ld-frv/fdpic1.s
new file mode 100644
index 00000000..29f7fff8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic2.ldv b/binutils-2.17/ld/testsuite/ld-frv/fdpic2.ldv
new file mode 100644
index 00000000..b5aad4f3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/fdpic2.ldv
@@ -0,0 +1 @@
+{ global: _start; F2; D2; local: *; };
diff --git a/binutils-2.17/ld/testsuite/ld-frv/fdpic2.s b/binutils-2.17/ld/testsuite/ld-frv/fdpic2.s
new file mode 100644
index 00000000..29876436
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic2min.ldv b/binutils-2.17/ld/testsuite/ld-frv/fdpic2min.ldv
new file mode 100644
index 00000000..28045265
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic3.s b/binutils-2.17/ld/testsuite/ld-frv/fdpic3.s
new file mode 100644
index 00000000..f867b93d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic4.s b/binutils-2.17/ld/testsuite/ld-frv/fdpic4.s
new file mode 100644
index 00000000..795ae455
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic5.s b/binutils-2.17/ld/testsuite/ld-frv/fdpic5.s
new file mode 100644
index 00000000..f4d466a8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic6.ldv b/binutils-2.17/ld/testsuite/ld-frv/fdpic6.ldv
new file mode 100644
index 00000000..5e46c030
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/fdpic6.ldv
@@ -0,0 +1 @@
+{ global: _start; F6; D6; WF*; local: *; };
diff --git a/binutils-2.17/ld/testsuite/ld-frv/fdpic6.s b/binutils-2.17/ld/testsuite/ld-frv/fdpic6.s
new file mode 100644
index 00000000..cd8e1d0e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic7.s b/binutils-2.17/ld/testsuite/ld-frv/fdpic7.s
new file mode 100644
index 00000000..ceac5fcd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic8.ldv b/binutils-2.17/ld/testsuite/ld-frv/fdpic8.ldv
new file mode 100644
index 00000000..d258f964
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/fdpic8.ldv
@@ -0,0 +1 @@
+{ global: _start; F8; D8; local: *; };
diff --git a/binutils-2.17/ld/testsuite/ld-frv/fdpic8.s b/binutils-2.17/ld/testsuite/ld-frv/fdpic8.s
new file mode 100644
index 00000000..037250fa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fdpic8min.ldv b/binutils-2.17/ld/testsuite/ld-frv/fdpic8min.ldv
new file mode 100644
index 00000000..aeadb791
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fr450-link.d b/binutils-2.17/ld/testsuite/ld-frv/fr450-link.d
new file mode 100644
index 00000000..1ab80b06
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/fr450-linka.s b/binutils-2.17/ld/testsuite/ld-frv/fr450-linka.s
new file mode 100644
index 00000000..4e7fe2f0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/fr450-linka.s
@@ -0,0 +1 @@
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-frv/fr450-linkb.s b/binutils-2.17/ld/testsuite/ld-frv/fr450-linkb.s
new file mode 100644
index 00000000..4e7fe2f0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/fr450-linkb.s
@@ -0,0 +1 @@
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-frv/fr450-linkc.s b/binutils-2.17/ld/testsuite/ld-frv/fr450-linkc.s
new file mode 100644
index 00000000..4e7fe2f0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/fr450-linkc.s
@@ -0,0 +1 @@
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-frv/frv-elf.exp b/binutils-2.17/ld/testsuite/ld-frv/frv-elf.exp
new file mode 100644
index 00000000..1d63e033
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/frv-elf.exp
@@ -0,0 +1,3 @@
+if [istarget frv*-*-*] {
+ run_dump_test "fr450-link"
+}
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-1-dep.s b/binutils-2.17/ld/testsuite/ld-frv/tls-1-dep.s
new file mode 100644
index 00000000..75daab73
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/tls-1-shared.lds b/binutils-2.17/ld/testsuite/ld-frv/tls-1-shared.lds
new file mode 100644
index 00000000..3769e01a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/tls-1-shared.lds
@@ -0,0 +1,3 @@
+{
+ local: x; i;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-1.s b/binutils-2.17/ld/testsuite/ld-frv/tls-1.s
new file mode 100644
index 00000000..a13c91bc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/tls-2.s b/binutils-2.17/ld/testsuite/ld-frv/tls-2.s
new file mode 100644
index 00000000..f0712e32
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/tls-3.s b/binutils-2.17/ld/testsuite/ld-frv/tls-3.s
new file mode 100644
index 00000000..6dd79728
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/tls-dynamic-1.d b/binutils-2.17/ld/testsuite/ld-frv/tls-dynamic-1.d
new file mode 100644
index 00000000..a3790c99
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-dynamic-2.d b/binutils-2.17/ld/testsuite/ld-frv/tls-dynamic-2.d
new file mode 100644
index 00000000..64707319
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-dynamic-3.d b/binutils-2.17/ld/testsuite/ld-frv/tls-dynamic-3.d
new file mode 100644
index 00000000..35be3a92
--- /dev/null
+++ b/binutils-2.17/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 ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-initial-shared-2.d b/binutils-2.17/ld/testsuite/ld-frv/tls-initial-shared-2.d
new file mode 100644
index 00000000..e221bec9
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-pie-1.d b/binutils-2.17/ld/testsuite/ld-frv/tls-pie-1.d
new file mode 100644
index 00000000..11654fcd
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-pie-3.d b/binutils-2.17/ld/testsuite/ld-frv/tls-pie-3.d
new file mode 100644
index 00000000..4783ce02
--- /dev/null
+++ b/binutils-2.17/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 ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-relax-dynamic-1.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-dynamic-1.d
new file mode 100644
index 00000000..7075a288
--- /dev/null
+++ b/binutils-2.17/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 ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF x
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-relax-dynamic-2.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-dynamic-2.d
new file mode 100644
index 00000000..84f322cd
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-relax-dynamic-3.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-dynamic-3.d
new file mode 100644
index 00000000..6aa4fc7e
--- /dev/null
+++ b/binutils-2.17/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 ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-initial-shared-2.d
new file mode 100644
index 00000000..64ae61f0
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-relax-pie-1.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-pie-1.d
new file mode 100644
index 00000000..cc114430
--- /dev/null
+++ b/binutils-2.17/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 ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF x
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-relax-pie-3.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-pie-3.d
new file mode 100644
index 00000000..4bc52917
--- /dev/null
+++ b/binutils-2.17/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 ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-relax-shared-1.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-shared-1.d
new file mode 100644
index 00000000..35d5c677
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-relax-shared-2.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-shared-2.d
new file mode 100644
index 00000000..e7ac840f
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-relax-shared-3.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-shared-3.d
new file mode 100644
index 00000000..48909d51
--- /dev/null
+++ b/binutils-2.17/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 ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-relax-static-1.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-static-1.d
new file mode 100644
index 00000000..d87d22c1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/tls-relax-static-3.d b/binutils-2.17/ld/testsuite/ld-frv/tls-relax-static-3.d
new file mode 100644
index 00000000..f4ce45f9
--- /dev/null
+++ b/binutils-2.17/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 <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-shared-1-fail.d b/binutils-2.17/ld/testsuite/ld-frv/tls-shared-1-fail.d
new file mode 100644
index 00000000..8cb220dc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-frv/tls-shared-1.d b/binutils-2.17/ld/testsuite/ld-frv/tls-shared-1.d
new file mode 100644
index 00000000..03fe411c
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-shared-2.d b/binutils-2.17/ld/testsuite/ld-frv/tls-shared-2.d
new file mode 100644
index 00000000..b622ad48
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-shared-3.d b/binutils-2.17/ld/testsuite/ld-frv/tls-shared-3.d
new file mode 100644
index 00000000..dc2d6934
--- /dev/null
+++ b/binutils-2.17/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 ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+[0-9a-f ]+: R_FRV_TLSOFF u
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls-static-1.d b/binutils-2.17/ld/testsuite/ld-frv/tls-static-1.d
new file mode 100644
index 00000000..0eeb21d6
--- /dev/null
+++ b/binutils-2.17/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 ]+<_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.17/ld/testsuite/ld-frv/tls-static-3.d b/binutils-2.17/ld/testsuite/ld-frv/tls-static-3.d
new file mode 100644
index 00000000..7a6bea98
--- /dev/null
+++ b/binutils-2.17/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 ]+<_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
diff --git a/binutils-2.17/ld/testsuite/ld-frv/tls.exp b/binutils-2.17/ld/testsuite/ld-frv/tls.exp
new file mode 100644
index 00000000..416bcfaa
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-frv/tls.exp
@@ -0,0 +1,62 @@
+# Expect script for FRV FDPIC TLS linker tests
+# Copyright 2003, 2004, 2005 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+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.17/ld/testsuite/ld-h8300/gcsection.d b/binutils-2.17/ld/testsuite/ld-h8300/gcsection.d
new file mode 100644
index 00000000..638d9857
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/gcsection.s b/binutils-2.17/ld/testsuite/ld-h8300/gcsection.s
new file mode 100644
index 00000000..2149ee99
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/h8300.exp b/binutils-2.17/ld/testsuite/ld-h8300/h8300.exp
new file mode 100644
index 00000000..7a2b3700
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-h8300/h8300.exp
@@ -0,0 +1,41 @@
+# Expect script for ld-h8300 tests
+# Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Written by Nick Clifton <nickc@redhat.com>
+#
+
+# Test h8300
+
+if ![istarget h8300-*-*] {
+ return
+}
+
+run_dump_test relax
+
+if {[istarget *-elf]} {
+ 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.17/ld/testsuite/ld-h8300/relax-2.d b/binutils-2.17/ld/testsuite/ld-h8300/relax-2.d
new file mode 100644
index 00000000..963139d3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-2.s b/binutils-2.17/ld/testsuite/ld-h8300/relax-2.s
new file mode 100644
index 00000000..aa82dba2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-3-coff.d b/binutils-2.17/ld/testsuite/ld-h8300/relax-3-coff.d
new file mode 100644
index 00000000..03843989
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-3.d b/binutils-2.17/ld/testsuite/ld-h8300/relax-3.d
new file mode 100644
index 00000000..b9eded21
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-3.s b/binutils-2.17/ld/testsuite/ld-h8300/relax-3.s
new file mode 100644
index 00000000..f4a2346a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-4-coff.d b/binutils-2.17/ld/testsuite/ld-h8300/relax-4-coff.d
new file mode 100644
index 00000000..d6417ac4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-4.d b/binutils-2.17/ld/testsuite/ld-h8300/relax-4.d
new file mode 100644
index 00000000..b8d38ce8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-4.s b/binutils-2.17/ld/testsuite/ld-h8300/relax-4.s
new file mode 100644
index 00000000..32b5b060
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-5-coff.d b/binutils-2.17/ld/testsuite/ld-h8300/relax-5-coff.d
new file mode 100644
index 00000000..eed2ba07
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-5.d b/binutils-2.17/ld/testsuite/ld-h8300/relax-5.d
new file mode 100644
index 00000000..01e12a52
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-5.s b/binutils-2.17/ld/testsuite/ld-h8300/relax-5.s
new file mode 100644
index 00000000..b5afedbf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-6-coff.d b/binutils-2.17/ld/testsuite/ld-h8300/relax-6-coff.d
new file mode 100644
index 00000000..b9c1e2f0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-6.d b/binutils-2.17/ld/testsuite/ld-h8300/relax-6.d
new file mode 100644
index 00000000..023af78a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax-6.s b/binutils-2.17/ld/testsuite/ld-h8300/relax-6.s
new file mode 100644
index 00000000..fb44b54c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax.d b/binutils-2.17/ld/testsuite/ld-h8300/relax.d
new file mode 100644
index 00000000..e7315a1c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-h8300/relax.s b/binutils-2.17/ld/testsuite/ld-h8300/relax.s
new file mode 100644
index 00000000..b06f3a92
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/abs.d b/binutils-2.17/ld/testsuite/ld-i386/abs.d
new file mode 100644
index 00000000..62935154
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/abs.d
@@ -0,0 +1,10 @@
+#name: Absolute non-overflowing relocs
+#source: abs.s
+#source: zero.s
+#ld:
+#objdump: -rs
+
+.*: file format .*
+
+Contents of section \.text:
+[ ][0-9a-f]+ c800fff0 c8000110 c9c3.*
diff --git a/binutils-2.17/ld/testsuite/ld-i386/abs.s b/binutils-2.17/ld/testsuite/ld-i386/abs.s
new file mode 100644
index 00000000..27059508
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/combreloc.d b/binutils-2.17/ld/testsuite/ld-i386/combreloc.d
new file mode 100644
index 00000000..a6f482d9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/combreloc.d
@@ -0,0 +1,18 @@
+# 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
+#target: i?86-*-*
+
+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.17/ld/testsuite/ld-i386/combreloc.s b/binutils-2.17/ld/testsuite/ld-i386/combreloc.s
new file mode 100644
index 00000000..2a78a7ce
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/emit-relocs.d b/binutils-2.17/ld/testsuite/ld-i386/emit-relocs.d
new file mode 100644
index 00000000..0c16b94d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/emit-relocs.s b/binutils-2.17/ld/testsuite/ld-i386/emit-relocs.s
new file mode 100644
index 00000000..e609a2e5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/emit-relocs.s
@@ -0,0 +1 @@
+ call foo@plt
diff --git a/binutils-2.17/ld/testsuite/ld-i386/i386.exp b/binutils-2.17/ld/testsuite/ld-i386/i386.exp
new file mode 100644
index 00000000..ad8a6106
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/i386.exp
@@ -0,0 +1,115 @@
+# Expect script for ld-i386 tests
+# Copyright (C) 2002, 2005, 2006 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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}}
+ "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 "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"}
+}
+
+run_ld_link_tests $i386tests
+
+run_dump_test "abs"
+run_dump_test "pcrel8"
+run_dump_test "pcrel16"
diff --git a/binutils-2.17/ld/testsuite/ld-i386/pcrel16.d b/binutils-2.17/ld/testsuite/ld-i386/pcrel16.d
new file mode 100644
index 00000000..3d45afeb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/pcrel16.s b/binutils-2.17/ld/testsuite/ld-i386/pcrel16.s
new file mode 100644
index 00000000..d68a6c63
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/pcrel8.d b/binutils-2.17/ld/testsuite/ld-i386/pcrel8.d
new file mode 100644
index 00000000..208c64e4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/pcrel8.s b/binutils-2.17/ld/testsuite/ld-i386/pcrel8.s
new file mode 100644
index 00000000..e624aafa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/reloc.d b/binutils-2.17/ld/testsuite/ld-i386/reloc.d
new file mode 100644
index 00000000..9e8faa41
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/reloc.d
@@ -0,0 +1,18 @@
+# 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
+#target: i?86-*-*
+
+.*: +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.17/ld/testsuite/ld-i386/reloc.s b/binutils-2.17/ld/testsuite/ld-i386/reloc.s
new file mode 100644
index 00000000..0e3ff1d9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsbin.dd b/binutils-2.17/ld/testsuite/ld-i386/tlsbin.dd
new file mode 100644
index 00000000..08a1f314
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsbin.dd
@@ -0,0 +1,456 @@
+#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 0xfffffff8\(%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 0xffffffe8\(%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: 2b 83 dc ff ff ff[ ]+sub 0xffffffdc\(%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 0xffffffec\(%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\),%esi
+ 8049090: 90[ ]+nop *
+ 8049091: 90[ ]+nop *
+ 8049092: 8d 90 20 f0 ff ff[ ]+lea 0xfffff020\(%eax\),%edx
+# sl1
+ 8049098: 90[ ]+nop *
+ 8049099: 90[ ]+nop *
+ 804909a: 8d 88 24 f0 ff ff[ ]+lea 0xfffff024\(%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\),%esi
+ 80490af: 90[ ]+nop *
+ 80490b0: 90[ ]+nop *
+ 80490b1: 8d 90 40 f0 ff ff[ ]+lea 0xfffff040\(%eax\),%edx
+# sh1
+ 80490b7: 90[ ]+nop *
+ 80490b8: 90[ ]+nop *
+ 80490b9: 8d 88 44 f0 ff ff[ ]+lea 0xfffff044\(%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 0xffffffe8\(%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 0xffffffec\(%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 0xffffffdc\(%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 0xfffffff0\(%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 0xffffffe0\(%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 *
+ 8049173: 8b 5d fc[ ]+mov 0xfffffffc\(%ebp\),%ebx
+ 8049176: c9[ ]+leave *
+ 8049177: c3[ ]+ret *
+
+0+8049178 <_start>:
+ 8049178: 55[ ]+push %ebp
+ 8049179: 89 e5[ ]+mov %esp,%ebp
+ 804917b: e8 00 00 00 00[ ]+call 8049180 <_start\+0x8>
+ 8049180: 59[ ]+pop %ecx
+ 8049181: 81 c1 a4 0f 00 00[ ]+add \$0xfa4,%ecx
+ 8049187: 90[ ]+nop *
+ 8049188: 90[ ]+nop *
+ 8049189: 90[ ]+nop *
+ 804918a: 90[ ]+nop *
+# @gottpoff IE against global var
+ 804918b: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 8049192: 90[ ]+nop *
+ 8049193: 90[ ]+nop *
+ 8049194: 2b 91 f4 ff ff ff[ ]+sub 0xfffffff4\(%ecx\),%edx
+# ->R_386_TLS_TPOFF32 sG6
+ 804919a: 90[ ]+nop *
+ 804919b: 90[ ]+nop *
+ 804919c: 90[ ]+nop *
+ 804919d: 90[ ]+nop *
+# @indntpoff IE against global var
+ 804919e: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 80491a4: 90[ ]+nop *
+ 80491a5: 90[ ]+nop *
+ 80491a6: 03 05 08 a1 04 08[ ]+add 0x804a108,%eax
+# ->R_386_TLS_TPOFF sG7
+ 80491ac: 90[ ]+nop *
+ 80491ad: 90[ ]+nop *
+ 80491ae: 90[ ]+nop *
+ 80491af: 90[ ]+nop *
+# @indntpoff direct %gs access IE against global var
+ 80491b0: 8b 15 20 a1 04 08[ ]+mov 0x804a120,%edx
+# ->R_386_TLS_TPOFF sG8
+ 80491b6: 90[ ]+nop *
+ 80491b7: 90[ ]+nop *
+ 80491b8: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 80491bb: 90[ ]+nop *
+ 80491bc: 90[ ]+nop *
+ 80491bd: 90[ ]+nop *
+ 80491be: 90[ ]+nop *
+# @gottpoff IE -> LE against global var defined in exec
+ 80491bf: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 80491c6: 90[ ]+nop *
+ 80491c7: 90[ ]+nop *
+ 80491c8: 81 ea 8c 0f 00 00[ ]+sub \$0xf8c,%edx
+# bg6
+ 80491ce: 90[ ]+nop *
+ 80491cf: 90[ ]+nop *
+ 80491d0: 90[ ]+nop *
+ 80491d1: 90[ ]+nop *
+# @indntpoff IE -> LE against global var defined in exec
+ 80491d2: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 80491d8: 90[ ]+nop *
+ 80491d9: 90[ ]+nop *
+ 80491da: 81 c0 78 f0 ff ff[ ]+add \$0xfffff078,%eax
+# bg7
+ 80491e0: 90[ ]+nop *
+ 80491e1: 90[ ]+nop *
+ 80491e2: 90[ ]+nop *
+ 80491e3: 90[ ]+nop *
+# @indntpoff direct %gs access IE -> LE against global var defined
+# in exec
+ 80491e4: c7 c2 7c f0 ff ff[ ]+mov \$0xfffff07c,%edx
+# bg8
+ 80491ea: 90[ ]+nop *
+ 80491eb: 90[ ]+nop *
+ 80491ec: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 80491ef: 90[ ]+nop *
+ 80491f0: 90[ ]+nop *
+ 80491f1: 90[ ]+nop *
+ 80491f2: 90[ ]+nop *
+# @gottpoff IE -> LE against local var
+ 80491f3: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 80491fa: 90[ ]+nop *
+ 80491fb: 90[ ]+nop *
+ 80491fc: 81 ea 6c 0f 00 00[ ]+sub \$0xf6c,%edx
+# bl6
+ 8049202: 90[ ]+nop *
+ 8049203: 90[ ]+nop *
+ 8049204: 90[ ]+nop *
+ 8049205: 90[ ]+nop *
+# @indntpoff IE -> LE against local var
+ 8049206: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 804920c: 90[ ]+nop *
+ 804920d: 90[ ]+nop *
+ 804920e: 81 c0 98 f0 ff ff[ ]+add \$0xfffff098,%eax
+# bl7
+ 8049214: 90[ ]+nop *
+ 8049215: 90[ ]+nop *
+ 8049216: 90[ ]+nop *
+ 8049217: 90[ ]+nop *
+# @indntpoff direct %gs access IE -> LE against local var
+ 8049218: c7 c2 9c f0 ff ff[ ]+mov \$0xfffff09c,%edx
+# bl8
+ 804921e: 90[ ]+nop *
+ 804921f: 90[ ]+nop *
+ 8049220: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 8049223: 90[ ]+nop *
+ 8049224: 90[ ]+nop *
+ 8049225: 90[ ]+nop *
+ 8049226: 90[ ]+nop *
+# @gottpoff IE -> LE against hidden but not local var
+ 8049227: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 804922e: 90[ ]+nop *
+ 804922f: 90[ ]+nop *
+ 8049230: 81 ea ac 0f 00 00[ ]+sub \$0xfac,%edx
+# sh6
+ 8049236: 90[ ]+nop *
+ 8049237: 90[ ]+nop *
+ 8049238: 90[ ]+nop *
+ 8049239: 90[ ]+nop *
+# @indntpoff IE -> LE against hidden but not local var
+ 804923a: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 8049240: 90[ ]+nop *
+ 8049241: 90[ ]+nop *
+ 8049242: 81 c0 58 f0 ff ff[ ]+add \$0xfffff058,%eax
+# sh7
+ 8049248: 90[ ]+nop *
+ 8049249: 90[ ]+nop *
+ 804924a: 90[ ]+nop *
+ 804924b: 90[ ]+nop *
+# @indntpoff direct %gs access IE -> LE against hidden but not
+# local var
+ 804924c: c7 c2 5c f0 ff ff[ ]+mov \$0xfffff05c,%edx
+# sh8
+ 8049252: 90[ ]+nop *
+ 8049253: 90[ ]+nop *
+ 8049254: 65 8b 02[ ]+mov %gs:\(%edx\),%eax
+ 8049257: 90[ ]+nop *
+ 8049258: 90[ ]+nop *
+ 8049259: 90[ ]+nop *
+ 804925a: 90[ ]+nop *
+# LE @tpoff, global var defined in exec
+ 804925b: ba 00 10 00 00[ ]+mov \$0x1000,%edx
+# sg1
+ 8049260: 90[ ]+nop *
+ 8049261: 90[ ]+nop *
+ 8049262: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 8049268: 90[ ]+nop *
+ 8049269: 90[ ]+nop *
+ 804926a: 29 d0[ ]+sub %edx,%eax
+ 804926c: 90[ ]+nop *
+ 804926d: 90[ ]+nop *
+ 804926e: 90[ ]+nop *
+ 804926f: 90[ ]+nop *
+# LE @tpoff, local var
+ 8049270: b8 7f 0f 00 00[ ]+mov \$0xf7f,%eax
+# bl1+1
+ 8049275: 90[ ]+nop *
+ 8049276: 90[ ]+nop *
+ 8049277: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 804927e: 90[ ]+nop *
+ 804927f: 90[ ]+nop *
+ 8049280: 29 c2[ ]+sub %eax,%edx
+ 8049282: 90[ ]+nop *
+ 8049283: 90[ ]+nop *
+ 8049284: 90[ ]+nop *
+ 8049285: 90[ ]+nop *
+# LE @tpoff, hidden var defined in exec
+ 8049286: b8 bd 0f 00 00[ ]+mov \$0xfbd,%eax
+# sh1+3
+ 804928b: 90[ ]+nop *
+ 804928c: 90[ ]+nop *
+ 804928d: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 8049294: 90[ ]+nop *
+ 8049295: 90[ ]+nop *
+ 8049296: 29 c2[ ]+sub %eax,%edx
+ 8049298: 90[ ]+nop *
+ 8049299: 90[ ]+nop *
+ 804929a: 90[ ]+nop *
+ 804929b: 90[ ]+nop *
+# LE @ntpoff, global var defined in exec
+ 804929c: 65 a1 00 00 00 00[ ]+mov %gs:0x0,%eax
+ 80492a2: 90[ ]+nop *
+ 80492a3: 90[ ]+nop *
+ 80492a4: 8d 90 04 f0 ff ff[ ]+lea 0xfffff004\(%eax\),%edx
+# sg2
+ 80492aa: 90[ ]+nop *
+ 80492ab: 90[ ]+nop *
+ 80492ac: 90[ ]+nop *
+ 80492ad: 90[ ]+nop *
+# LE @ntpoff, local var, non-canonical sequence
+ 80492ae: b8 86 f0 ff ff[ ]+mov \$0xfffff086,%eax
+# bl2+2
+ 80492b3: 90[ ]+nop *
+ 80492b4: 90[ ]+nop *
+ 80492b5: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 80492bc: 90[ ]+nop *
+ 80492bd: 90[ ]+nop *
+ 80492be: 01 c2[ ]+add %eax,%edx
+ 80492c0: 90[ ]+nop *
+ 80492c1: 90[ ]+nop *
+ 80492c2: 90[ ]+nop *
+ 80492c3: 90[ ]+nop *
+# LE @ntpoff, hidden var defined in exec, non-canonical sequence
+ 80492c4: 65 8b 15 00 00 00 00[ ]+mov %gs:0x0,%edx
+ 80492cb: 90[ ]+nop *
+ 80492cc: 90[ ]+nop *
+ 80492cd: 81 c2 45 f0 ff ff[ ]+add \$0xfffff045,%edx
+# sh2+1
+ 80492d3: 90[ ]+nop *
+ 80492d4: 90[ ]+nop *
+ 80492d5: 90[ ]+nop *
+ 80492d6: 90[ ]+nop *
+# LE @ntpoff, global var defined in exec
+ 80492d7: 65 a1 08 f0 ff ff[ ]+mov %gs:0xfffff008,%eax
+# sg3
+ 80492dd: 90[ ]+nop *
+ 80492de: 90[ ]+nop *
+ 80492df: 90[ ]+nop *
+ 80492e0: 90[ ]+nop *
+# LE @ntpoff, local var
+ 80492e1: 65 8b 15 8b f0 ff ff[ ]+mov %gs:0xfffff08b,%edx
+# bl3+3
+ 80492e8: 90[ ]+nop *
+ 80492e9: 90[ ]+nop *
+ 80492ea: 90[ ]+nop *
+ 80492eb: 90[ ]+nop *
+# LE @ntpoff, hidden var defined in exec
+ 80492ec: 65 8b 15 49 f0 ff ff[ ]+mov %gs:0xfffff049,%edx
+# sh3+1
+ 80492f3: 90[ ]+nop *
+ 80492f4: 90[ ]+nop *
+ 80492f5: 90[ ]+nop *
+ 80492f6: 90[ ]+nop *
+ 80492f7: 8b 5d fc[ ]+mov 0xfffffffc\(%ebp\),%ebx
+ 80492fa: c9[ ]+leave *
+ 80492fb: c3[ ]+ret *
diff --git a/binutils-2.17/ld/testsuite/ld-i386/tlsbin.rd b/binutils-2.17/ld/testsuite/ld-i386/tlsbin.rd
new file mode 100644
index 00000000..b4856260
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsbin.rd
@@ -0,0 +1,163 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are 17 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\] \.rel.dyn +.*
+ \[ 6\] \.rel.plt +.*
+ \[ 7\] \.plt +.*
+ \[ 8\] \.text +PROGBITS +0+8049000 .*
+ \[ 9\] \.tdata +PROGBITS +0+804a000 [0-9a-f]+ 000060 00 WAT 0 0 4096
+ \[10\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ 000040 00 WAT 0 0 1
+ \[11\] \.dynamic +DYNAMIC +0+804a060 .*
+ \[12\] \.got +PROGBITS +0+804a100 .*
+ \[13\] \.got\.plt +PROGBITS +0+804a124 .*
+ \[14\] \.shstrtab +.*
+ \[15\] \.symtab +.*
+ \[16\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x8049178
+There are 6 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 13 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 73 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 SECTION LOCAL DEFAULT +14 *
+ +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +15 *
+ +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +16 *
+ +[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 +HIDDEN +11 _DYNAMIC
+ +[0-9]+: [0-9a-f]+ +0 OBJECT LOCAL +HIDDEN +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+8049178 +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.17/ld/testsuite/ld-i386/tlsbin.s b/binutils-2.17/ld/testsuite/ld-i386/tlsbin.s
new file mode 100644
index 00000000..db80e098
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsbin.sd b/binutils-2.17/ld/testsuite/ld-i386/tlsbin.sd
new file mode 100644
index 00000000..2fa7a897
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsbin.td b/binutils-2.17/ld/testsuite/ld-i386/tlsbin.td
new file mode 100644
index 00000000..bb29455e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsbindesc.dd b/binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.dd
new file mode 100644
index 00000000..071a5b32
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.dd
@@ -0,0 +1,463 @@
+#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 0xfffffff8\(%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 0xffffffe8\(%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 0xffffffdc\(%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 *
+ [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 0xfffffff0\(%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 *
+ [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]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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 f0 ff ff[ ]+lea 0xfffff000,%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 90 20 f0 ff ff[ ]+lea 0xfffff020\(%eax\),%edx
+# sl1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 24 f0 ff ff[ ]+lea 0xfffff024\(%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 f0 ff ff[ ]+lea 0xfffff000,%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 90 40 f0 ff ff[ ]+lea 0xfffff040\(%eax\),%edx
+# sh1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 8d 88 44 f0 ff ff[ ]+lea 0xfffff044\(%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 0xffffffe8\(%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 0xffffffec\(%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 0xffffffdc\(%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 0xfffffff0\(%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 0xffffffe0\(%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 0xfffffffc\(%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 0xfffffff4\(%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 0xfffff004\(%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 0xfffffffc\(%ebp\),%ebx
+ [0-9a-f]+: c9[ ]+leave *
+ [0-9a-f]+: c3[ ]+ret *
diff --git a/binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.rd b/binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.rd
new file mode 100644
index 00000000..27d0670c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.rd
@@ -0,0 +1,154 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --32
+#ld: -melf_i386 tmpdir/libtlslib.so
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are 15 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\] \.rel.dyn +.*
+ \[ 6\] \.text +PROGBITS +0+8049000 .*
+ \[ 7\] \.tdata +PROGBITS +0+804a000 [0-9a-f]+ 000060 00 WAT 0 0 4096
+ \[ 8\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ 000040 00 WAT 0 0 1
+ \[ 9\] \.dynamic +DYNAMIC +0+804a060 .*
+ \[10\] \.got +PROGBITS +0+804a0e0 .*
+ \[11\] \.got\.plt +PROGBITS +0+804a104 .*
+ \[12\] \.shstrtab +.*
+ \[13\] \.symtab +.*
+ \[14\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x8049158
+There are 6 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 12 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 71 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 SECTION LOCAL DEFAULT +14 *
+ +[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]+: 00000000 +0 TLS +LOCAL HIDDEN +7 _TLS_MODULE_BASE_
+ +[0-9]+: 0+804a060 +0 OBJECT LOCAL HIDDEN 9 _DYNAMIC
+ +[0-9]+: [0-9a-f]+ +0 OBJECT LOCAL HIDDEN 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.17/ld/testsuite/ld-i386/tlsbindesc.s b/binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.s
new file mode 100644
index 00000000..9094d083
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsbindesc.sd b/binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.sd
new file mode 100644
index 00000000..a87f5da4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsbindesc.td b/binutils-2.17/ld/testsuite/ld-i386/tlsbindesc.td
new file mode 100644
index 00000000..726df3ed
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsbinpic.s b/binutils-2.17/ld/testsuite/ld-i386/tlsbinpic.s
new file mode 100644
index 00000000..844f9526
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsbinpic.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@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
+
+ movl -4(%ebp), %ebx
+ leave
+ ret
diff --git a/binutils-2.17/ld/testsuite/ld-i386/tlsdesc.dd b/binutils-2.17/ld/testsuite/ld-i386/tlsdesc.dd
new file mode 100644
index 00000000..666f790c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsdesc.dd
@@ -0,0 +1,399 @@
+#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 0xfffffff8\(%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 0xffffffc4\(%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]+: 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 0xffffffd4\(%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 *
+ [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 0xffffffb0\(%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 0xffffffb4\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sl3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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 0xffffffbc\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sl4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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 0xfffffffc\(%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 0xffffffc8\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sh3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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 0xffffffe8\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sh4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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 0xffffffcc\(%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 0xffffffec\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sH3
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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 0xffffffe0\(%ebx\),%eax
+# ->R_386_TLS_TPOFF32 sH4
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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 0xfffffff8\(%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 0xffffffd0\(%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 0xffffffc4\(%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 0xffffffd4\(%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 0xffffffb0\(%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 0xffffffb8\(%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 0xffffffb4\(%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 0xffffffbc\(%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 0xfffffffc\(%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 0xffffffe4\(%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 0xffffffc8\(%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 0xffffffe8\(%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 0xffffffcc\(%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 0xffffffdc\(%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 0xffffffec\(%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 0xffffffe0\(%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 0xffffffd8\(%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 0xffffffc0\(%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 0xfffffff0\(%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 0xfffffff4\(%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 0xfffffffc\(%ebp\),%ebx
+ [0-9a-f]+: c9[ ]+leave *
+ [0-9a-f]+: c3[ ]+ret *
diff --git a/binutils-2.17/ld/testsuite/ld-i386/tlsdesc.rd b/binutils-2.17/ld/testsuite/ld-i386/tlsdesc.rd
new file mode 100644
index 00000000..12fd5d42
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsdesc.rd
@@ -0,0 +1,155 @@
+#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.*:
+
+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\] \.rel.dyn +.*
+ \[ 5\] \.rel.plt +.*
+ \[ 6\] \.text +.*
+ \[ 7\] \.tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000060 00 WAT 0 0 1
+ \[ 8\] \.tbss +NOBITS +[0-9aa-f]+ [0-9a-f]+ 000020 00 WAT 0 0 1
+ \[ 9\] \.dynamic +.*
+ \[10\] \.got +.*
+ \[11\] \.got.plt +.*
+ \[12\] \.shstrtab +.*
+ \[13\] \.symtab +.*
+ \[14\] \.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]+ +0+25 R_386_TLS_TPOFF32
+[0-9a-f]+ +0+0e R_386_TLS_TPOFF *
+[0-9a-f]+ +0+25 R_386_TLS_TPOFF32
+[0-9a-f]+ +0+0e R_386_TLS_TPOFF *
+[0-9a-f]+ +0+0e R_386_TLS_TPOFF *
+[0-9a-f]+ +0+0e R_386_TLS_TPOFF *
+[0-9a-f]+ +0+25 R_386_TLS_TPOFF32
+[0-9a-f]+ +0+25 R_386_TLS_TPOFF32
+[0-9a-f]+ +0+0e R_386_TLS_TPOFF *
+[0-9a-f]+ +0+25 R_386_TLS_TPOFF32
+[0-9a-f]+ +0+0e R_386_TLS_TPOFF *
+[0-9a-f]+ +0+0e R_386_TLS_TPOFF *
+[0-9a-f]+ +0+0e R_386_TLS_TPOFF *
+[0-9a-f]+ +0+0e R_386_TLS_TPOFF *
+[0-9a-f]+ +0+25 R_386_TLS_TPOFF32
+[0-9a-f]+ +0+50e R_386_TLS_TPOFF 0+8 sg3
+[0-9a-f]+ +0+625 R_386_TLS_TPOFF32 0+c sg4
+[0-9a-f]+ +0+60e R_386_TLS_TPOFF 0+c sg4
+[0-9a-f]+ +0+70e R_386_TLS_TPOFF 0+10 sg5
+[0-9a-f]+ +0+b25 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]+ +0+829 R_386_TLS_DESC * 0+ sg1
+[0-9a-f]+ +0+29 R_386_TLS_DESC *
+[0-9a-f]+ +0+29 R_386_TLS_DESC *
+[0-9a-f]+ +0+29 R_386_TLS_DESC *
+[0-9a-f]+ +0+29 R_386_TLS_DESC *
+
+Symbol table '.dynsym' contains 16 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 +6 *
+ +[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 +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 54 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 SECTION LOCAL DEFAULT +14 *
+ +[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 HIDDEN +8 sH1
+ +[0-9]+: 0+ +0 TLS +LOCAL HIDDEN +7 _TLS_MODULE_BASE_
+ +[0-9]+: [0-9a-f]+ +0 OBJECT LOCAL HIDDEN ABS _DYNAMIC
+ +[0-9]+: 0+48 +0 TLS +LOCAL HIDDEN +7 sh3
+ +[0-9]+: 0+64 +0 TLS +LOCAL HIDDEN +8 sH2
+ +[0-9]+: 0+78 +0 TLS +LOCAL HIDDEN +8 sH7
+ +[0-9]+: 0+58 +0 TLS +LOCAL HIDDEN +7 sh7
+ +[0-9]+: 0+5c +0 TLS +LOCAL HIDDEN +7 sh8
+ +[0-9]+: 0+6c +0 TLS +LOCAL HIDDEN +8 sH4
+ +[0-9]+: 0+4c +0 TLS +LOCAL HIDDEN +7 sh4
+ +[0-9]+: 0+68 +0 TLS +LOCAL HIDDEN +8 sH3
+ +[0-9]+: 0+50 +0 TLS +LOCAL HIDDEN +7 sh5
+ +[0-9]+: 0+70 +0 TLS +LOCAL HIDDEN +8 sH5
+ +[0-9]+: 0+74 +0 TLS +LOCAL HIDDEN +8 sH6
+ +[0-9]+: 0+7c +0 TLS +LOCAL HIDDEN +8 sH8
+ +[0-9]+: 0+40 +0 TLS +LOCAL HIDDEN +7 sh1
+ +[0-9]+: [0-9a-f]+ +0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+44 +0 TLS +LOCAL HIDDEN +7 sh2
+ +[0-9]+: 0+54 +0 TLS +LOCAL HIDDEN +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.17/ld/testsuite/ld-i386/tlsdesc.s b/binutils-2.17/ld/testsuite/ld-i386/tlsdesc.s
new file mode 100644
index 00000000..8377f649
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsdesc.sd b/binutils-2.17/ld/testsuite/ld-i386/tlsdesc.sd
new file mode 100644
index 00000000..2af8c2d3
--- /dev/null
+++ b/binutils-2.17/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]+ ec150000 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.17/ld/testsuite/ld-i386/tlsdesc.td b/binutils-2.17/ld/testsuite/ld-i386/tlsdesc.td
new file mode 100644
index 00000000..f3612b32
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsg.s b/binutils-2.17/ld/testsuite/ld-i386/tlsg.s
new file mode 100644
index 00000000..b8e1a5d7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsg.sd b/binutils-2.17/ld/testsuite/ld-i386/tlsg.sd
new file mode 100644
index 00000000..d7947622
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsgdesc.dd b/binutils-2.17/ld/testsuite/ld-i386/tlsgdesc.dd
new file mode 100644
index 00000000..ca4092ea
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsgdesc.dd
@@ -0,0 +1,158 @@
+#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 0xffffffe0\(%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 0xfffffff0\(%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 0xfffffff8\(,%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 0xffffffe8\(,%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 0xffffffe0\(%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 0xffffffe0\(%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 0xfffffff0\(%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 *
+ [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 0xfffffff0\(%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 0xffffffe4\(%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 0xffffffe4\(%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]+: 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 0xfffffff4\(%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 0xfffffff4\(%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 0xffffffe4\(%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 0xfffffff4\(%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 0xfffffffc\(%ebp\),%ebx
+ [0-9a-f]+: c9[ ]+leave *
+ [0-9a-f]+: c3[ ]+ret *
diff --git a/binutils-2.17/ld/testsuite/ld-i386/tlsgdesc.rd b/binutils-2.17/ld/testsuite/ld-i386/tlsgdesc.rd
new file mode 100644
index 00000000..9253d22c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsgdesc.rd
@@ -0,0 +1,107 @@
+#source: tlsgdesc.s
+#as: --32
+#ld: -shared -melf_i386
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are [0-9]+ section headers, starting at offset 0x.*:
+
+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\] \.rel.dyn +.*
+ \[ 5\] \.rel.plt +.*
+ \[ 6\] \.plt +.*
+ \[ 7\] \.text +.*
+ \[ 8\] \.dynamic +.*
+ \[ 9\] \.got +.*
+ \[10\] \.got.plt +.*
+ \[11\] \.shstrtab +.*
+ \[12\] \.symtab +.*
+ \[13\] \.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]+ +0+225 R_386_TLS_TPOFF32 0+ sG3
+[0-9a-f]+ +0+30e R_386_TLS_TPOFF 0+ sG5
+[0-9a-f]+ +0+423 R_386_TLS_DTPMOD3 0+ sG2
+[0-9a-f]+ +0+424 R_386_TLS_DTPOFF3 0+ sG2
+[0-9a-f]+ +0+50e R_386_TLS_TPOFF 0+ sG4
+[0-9a-f]+ +0+725 R_386_TLS_TPOFF32 0+ sG6
+[0-9a-f]+ +0+923 R_386_TLS_DTPMOD3 0+ sG1
+[0-9a-f]+ +0+924 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]+ 0+c07 R_386_JUMP_SLOT 0+ ___tls_get_addr
+[0-9a-f]+ 0+929 R_386_TLS_DESC 0+ sG1
+[0-9a-f]+ 0+429 R_386_TLS_DESC 0+ sG2
+
+Symbol table '.dynsym' contains 13 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-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 27 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 OBJECT LOCAL HIDDEN ABS _DYNAMIC
+ +[0-9]+: [0-9a-f]+ +0 OBJECT LOCAL HIDDEN 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.17/ld/testsuite/ld-i386/tlsgdesc.s b/binutils-2.17/ld/testsuite/ld-i386/tlsgdesc.s
new file mode 100644
index 00000000..9502a10d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsindntpoff.dd b/binutils-2.17/ld/testsuite/ld-i386/tlsindntpoff.dd
new file mode 100644
index 00000000..db20de1d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsindntpoff.s b/binutils-2.17/ld/testsuite/ld-i386/tlsindntpoff.s
new file mode 100644
index 00000000..4bc93f63
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlslib.s b/binutils-2.17/ld/testsuite/ld-i386/tlslib.s
new file mode 100644
index 00000000..22e1f8d2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsnopic.dd b/binutils-2.17/ld/testsuite/ld-i386/tlsnopic.dd
new file mode 100644
index 00000000..ddac1e23
--- /dev/null
+++ b/binutils-2.17/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 0xfffffffc\(%ebp\),%ebx
+ 10ef: c9[ ]+leave *
+ 10f0: c3[ ]+ret *
+ 10f1: 90[ ]+nop *
+ 10f2: 90[ ]+nop *
+ 10f3: 90[ ]+nop *
diff --git a/binutils-2.17/ld/testsuite/ld-i386/tlsnopic.rd b/binutils-2.17/ld/testsuite/ld-i386/tlsnopic.rd
new file mode 100644
index 00000000..d8dcc663
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlsnopic.rd
@@ -0,0 +1,121 @@
+#source: tlsnopic1.s
+#source: tlsnopic2.s
+#as: --32
+#ld: -shared -melf_i386
+#readelf: -Ssrl
+#target: i?86-*-*
+
+There are 13 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\] \.rel.dyn +.*
+ \[ 5\] \.text +PROGBITS +0+1000 .*
+ \[ 6\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ 000024 00 WAT 0 0 1
+ \[ 7\] \.dynamic +DYNAMIC +0+20f4 .*
+ \[ 8\] \.got +PROGBITS +0+2174 .*
+ \[ 9\] \.got.plt +PROGBITS +0+218c .*
+ \[10\] \.shstrtab +.*
+ \[11\] \.symtab +.*
+ \[12\] \.strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are 4 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 12 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 +5 *
+ +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +6 *
+ +[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 33 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+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 HIDDEN ABS _DYNAMIC
+ +[0-9]+: 0+1c +0 TLS +LOCAL HIDDEN +6 sh3
+ +[0-9]+: 0+20 +0 TLS +LOCAL HIDDEN +6 sh4
+ +[0-9]+: 0+14 +0 TLS +LOCAL HIDDEN +6 sh1
+ +[0-9]+: 0+218c +0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+18 +0 TLS +LOCAL HIDDEN +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.17/ld/testsuite/ld-i386/tlsnopic.sd b/binutils-2.17/ld/testsuite/ld-i386/tlsnopic.sd
new file mode 100644
index 00000000..fdfaacf2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsnopic1.s b/binutils-2.17/ld/testsuite/ld-i386/tlsnopic1.s
new file mode 100644
index 00000000..80a28bf2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlsnopic2.s b/binutils-2.17/ld/testsuite/ld-i386/tlsnopic2.s
new file mode 100644
index 00000000..d9329566
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlspic.dd b/binutils-2.17/ld/testsuite/ld-i386/tlspic.dd
new file mode 100644
index 00000000..98fcf011
--- /dev/null
+++ b/binutils-2.17/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 0xffffffd4\(,%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 0xfffffff0\(%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 0xffffffb4\(%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 0xffffffc0\(%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 0xffffff88\(,%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 0xffffff90\(%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 0xffffff94\(%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 0xffffff98\(%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 0xfffffff4\(,%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 0xfffffffc\(%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 0xffffffb8\(%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 0xffffffdc\(%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 0xffffffac\(,%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 0xffffffbc\(%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 0xffffffe4\(%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 0xffffffcc\(%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 0xffffffa4\(%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 0xffffffa4\(%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 0xffffffa4\(%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 0xfffffff0\(%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 0xffffffc0\(%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 0xffffffb4\(%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 0xffffffc4\(%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 0xffffff90\(%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 0xffffff98\(%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 0xffffff94\(%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 0xffffff9c\(%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 0xfffffffc\(%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 0xffffffdc\(%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 0xffffffb8\(%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 0xffffffe0\(%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 0xffffffbc\(%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 0xffffffcc\(%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 0xffffffe4\(%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 0xffffffd0\(%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 0xffffffc8\(%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 0xffffffa0\(%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 0xffffffe8\(%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 0xffffffec\(%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 0xfffffffc\(%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.17/ld/testsuite/ld-i386/tlspic.rd b/binutils-2.17/ld/testsuite/ld-i386/tlspic.rd
new file mode 100644
index 00000000..890a4938
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/tlspic.rd
@@ -0,0 +1,160 @@
+#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.*:
+
+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\] \.rel.dyn +.*
+ \[ 5\] \.rel.plt +.*
+ \[ 6\] \.plt +.*
+ \[ 7\] \.text +.*
+ \[ 8\] \.tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000060 00 WAT 0 0 1
+ \[ 9\] \.tbss +NOBITS +[0-9aa-f]+ [0-9a-f]+ 000020 00 WAT 0 0 1
+ \[10\] \.dynamic +.*
+ \[11\] \.got +.*
+ \[12\] \.got.plt +.*
+ \[13\] \.shstrtab +.*
+ \[14\] \.symtab +.*
+ \[15\] \.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 17 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-9a-f]+ +0 SECTION LOCAL DEFAULT +9 *
+ +[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 55 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 SECTION LOCAL DEFAULT +14 *
+ +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +15 *
+ +[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 HIDDEN +9 sH1
+ +[0-9]+: [0-9a-f]+ +0 OBJECT LOCAL HIDDEN ABS _DYNAMIC
+ +[0-9]+: 0+48 +0 TLS +LOCAL HIDDEN +8 sh3
+ +[0-9]+: 0+64 +0 TLS +LOCAL HIDDEN +9 sH2
+ +[0-9]+: 0+78 +0 TLS +LOCAL HIDDEN +9 sH7
+ +[0-9]+: 0+58 +0 TLS +LOCAL HIDDEN +8 sh7
+ +[0-9]+: 0+5c +0 TLS +LOCAL HIDDEN +8 sh8
+ +[0-9]+: 0+6c +0 TLS +LOCAL HIDDEN +9 sH4
+ +[0-9]+: 0+4c +0 TLS +LOCAL HIDDEN +8 sh4
+ +[0-9]+: 0+68 +0 TLS +LOCAL HIDDEN +9 sH3
+ +[0-9]+: 0+50 +0 TLS +LOCAL HIDDEN +8 sh5
+ +[0-9]+: 0+70 +0 TLS +LOCAL HIDDEN +9 sH5
+ +[0-9]+: 0+74 +0 TLS +LOCAL HIDDEN +9 sH6
+ +[0-9]+: 0+7c +0 TLS +LOCAL HIDDEN +9 sH8
+ +[0-9]+: 0+40 +0 TLS +LOCAL HIDDEN +8 sh1
+ +[0-9]+: [0-9a-f]+ +0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+44 +0 TLS +LOCAL HIDDEN +8 sh2
+ +[0-9]+: 0+54 +0 TLS +LOCAL HIDDEN +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.17/ld/testsuite/ld-i386/tlspic.sd b/binutils-2.17/ld/testsuite/ld-i386/tlspic.sd
new file mode 100644
index 00000000..f9c96276
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlspic.td b/binutils-2.17/ld/testsuite/ld-i386/tlspic.td
new file mode 100644
index 00000000..1291584d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlspic1.s b/binutils-2.17/ld/testsuite/ld-i386/tlspic1.s
new file mode 100644
index 00000000..9dcb3b73
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/tlspic2.s b/binutils-2.17/ld/testsuite/ld-i386/tlspic2.s
new file mode 100644
index 00000000..5513f9b5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/vxworks1-lib.dd b/binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.dd
new file mode 100644
index 00000000..8cebf825
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/vxworks1-lib.nd b/binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.nd
new file mode 100644
index 00000000..edf3db39
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/vxworks1-lib.rd b/binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.rd
new file mode 100644
index 00000000..ab567b6e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.rd
@@ -0,0 +1,12 @@
+
+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
+
+Relocation section '\.rel\.dyn' at offset .* contains 4 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+00081c00 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 00081800 x
diff --git a/binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.s b/binutils-2.17/ld/testsuite/ld-i386/vxworks1-lib.s
new file mode 100644
index 00000000..f9f05dc2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/vxworks1-static.d b/binutils-2.17/ld/testsuite/ld-i386/vxworks1-static.d
new file mode 100644
index 00000000..88c0baf1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/vxworks1.dd b/binutils-2.17/ld/testsuite/ld-i386/vxworks1.dd
new file mode 100644
index 00000000..33f68f4e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/vxworks1.ld b/binutils-2.17/ld/testsuite/ld-i386/vxworks1.ld
new file mode 100644
index 00000000..ff25b39a
--- /dev/null
+++ b/binutils-2.17/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);
+ .bss : { *(.bss) *(.dynbss) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-i386/vxworks1.rd b/binutils-2.17/ld/testsuite/ld-i386/vxworks1.rd
new file mode 100644
index 00000000..9fd7383c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/vxworks1.s b/binutils-2.17/ld/testsuite/ld-i386/vxworks1.s
new file mode 100644
index 00000000..5cb68af9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/vxworks2-static.sd b/binutils-2.17/ld/testsuite/ld-i386/vxworks2-static.sd
new file mode 100644
index 00000000..912755bc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/vxworks2.s b/binutils-2.17/ld/testsuite/ld-i386/vxworks2.s
new file mode 100644
index 00000000..28c8acbe
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/vxworks2.s
@@ -0,0 +1,5 @@
+ .globl _start
+ .type _start,@function
+_start:
+ ret
+ .end _start
diff --git a/binutils-2.17/ld/testsuite/ld-i386/vxworks2.sd b/binutils-2.17/ld/testsuite/ld-i386/vxworks2.sd
new file mode 100644
index 00000000..5ff87d3b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-i386/zero.s b/binutils-2.17/ld/testsuite/ld-i386/zero.s
new file mode 100644
index 00000000..f716bbab
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-i386/zero.s
@@ -0,0 +1,2 @@
+ .global zero
+ .equiv zero, 0
diff --git a/binutils-2.17/ld/testsuite/ld-ia64/ia64.exp b/binutils-2.17/ld/testsuite/ld-ia64/ia64.exp
new file mode 100644
index 00000000..b7ee50f2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-ia64/ia64.exp
@@ -0,0 +1,61 @@
+# Expect script for ld-ia64 tests
+# Copyright (C) 2002, 2003 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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.17/ld/testsuite/ld-ia64/link-order.d b/binutils-2.17/ld/testsuite/ld-ia64/link-order.d
new file mode 100644
index 00000000..53a3794a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlsbin.dd b/binutils-2.17/ld/testsuite/ld-ia64/tlsbin.dd
new file mode 100644
index 00000000..d5815796
--- /dev/null
+++ b/binutils-2.17/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 80 02 00 24[ ]+\[MFI\][ ]+addl r14=32,r1
+40+1016: 00 00 00 02 00 e0[ ]+nop.f 0x0
+40+101c: 81 0a 00 90[ ]+addl r15=40,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 c0 02 00 24[ ]+\[MFI\][ ]+addl r14=48,r1
+40+1036: 00 00 00 02 00 e0[ ]+nop.f 0x0
+40+103c: 01 0c 00 90[ ]+addl r15=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 c0 02 00 24[ ]+\[MFI\][ ]+addl r14=48,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 c0 02 00 24[ ]+\[MFI\][ ]+addl r14=48,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 60 02 00 24[ ]+\[MMI\][ ]+addl r14=24,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 c0 05 00 48 00[ ]+addl r14=56,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.17/ld/testsuite/ld-ia64/tlsbin.rd b/binutils-2.17/ld/testsuite/ld-ia64/tlsbin.rd
new file mode 100644
index 00000000..1fff2030
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-ia64/tlsbin.rd
@@ -0,0 +1,139 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as:
+#ld: -shared
+#readelf: -WSsrl
+#target: ia64-*-*
+
+There are 19 section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ \[ 0\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ \[ 1\] .interp +.*
+ \[ 2\] .hash +.*
+ \[ 3\] .dynsym +.*
+ \[ 4\] .dynstr +.*
+ \[ 5\] .rela.dyn +.*
+ \[ 6\] .rela.IA_64.pltof +.*
+ \[ 7\] .plt +.*
+ \[ 8\] .text +PROGBITS +40+1000 0+1000 0+140 00 +AX +0 +0 4096
+ \[ 9\] .IA_64.unwind_inf +.*
+ \[10\] .IA_64.unwind +.*
+ \[11\] .tdata +PROGBITS +60+1[0-9a-f]+ 0+1[0-9a-f]+ 0+60 00 WAT +0 +0 +4
+ \[12\] .tbss +NOBITS +60+1[0-9a-f]+ 0+1[0-9a-f]+ 0+40 00 WAT +0 +0 +1
+ \[13\] .dynamic +DYNAMIC +60+1[0-9a-f]+ 0+1[0-9a-f]+ 0+150 10 +WA +4 +0 +8
+ \[14\] .got +PROGBITS +60+1318 0+1318 0+48 00 WAp +0 +0 +8
+ \[15\] .IA_64.pltoff +.*
+ \[16\] .shstrtab +.*
+ \[17\] .symtab +.*
+ \[18\] .strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x40+10d0
+There are 7 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 69 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 *
+.* SECTION LOCAL +DEFAULT +16 *
+.* SECTION LOCAL +DEFAULT +17 *
+.* SECTION LOCAL +DEFAULT +18 *
+.* 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 +HIDDEN +13 _DYNAMIC
+.* OBJECT +LOCAL +HIDDEN +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.17/ld/testsuite/ld-ia64/tlsbin.s b/binutils-2.17/ld/testsuite/ld-ia64/tlsbin.s
new file mode 100644
index 00000000..7b5f34ac
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlsbin.sd b/binutils-2.17/ld/testsuite/ld-ia64/tlsbin.sd
new file mode 100644
index 00000000..5d8ab659
--- /dev/null
+++ b/binutils-2.17/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 01000000 0+ 90000000 0+ .*
+ (60+)?1358 24000000 0+ .*
diff --git a/binutils-2.17/ld/testsuite/ld-ia64/tlsbin.td b/binutils-2.17/ld/testsuite/ld-ia64/tlsbin.td
new file mode 100644
index 00000000..1e724e7c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlsbinpic.s b/binutils-2.17/ld/testsuite/ld-ia64/tlsbinpic.s
new file mode 100644
index 00000000..f0613434
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlsg.s b/binutils-2.17/ld/testsuite/ld-ia64/tlsg.s
new file mode 100644
index 00000000..fa3fce0c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlsg.sd b/binutils-2.17/ld/testsuite/ld-ia64/tlsg.sd
new file mode 100644
index 00000000..67bc9cdd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlslib.s b/binutils-2.17/ld/testsuite/ld-ia64/tlslib.s
new file mode 100644
index 00000000..d0e63feb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlspic.dd b/binutils-2.17/ld/testsuite/ld-ia64/tlspic.dd
new file mode 100644
index 00000000..32850f0d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlspic.rd b/binutils-2.17/ld/testsuite/ld-ia64/tlspic.rd
new file mode 100644
index 00000000..c1efeb54
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-ia64/tlspic.rd
@@ -0,0 +1,139 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as:
+#ld: -shared
+#readelf: -WSsrl
+#target: ia64-*-*
+
+There are 18 section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ \[ 0\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ \[ 1\] .hash +.*
+ \[ 2\] .dynsym +.*
+ \[ 3\] .dynstr +.*
+ \[ 4\] .rela.dyn +.*
+ \[ 5\] .rela.IA_64.pltof +.*
+ \[ 6\] .plt +.*
+ \[ 7\] .text +PROGBITS +0+1000 0+1000 0+110 00 +AX +0 +0 4096
+ \[ 8\] .IA_64.unwind_inf +.*
+ \[ 9\] .IA_64.unwind +.*
+ \[10\] .tdata +PROGBITS +0+11[0-9a-f]+ 0+1[0-9a-f]+ 0+60 00 WAT +0 +0 +4
+ \[11\] .tbss +NOBITS +0+11[0-9a-f]+ 0+1[0-9a-f]+ 0+20 00 WAT +0 +0 +1
+ \[12\] .dynamic +DYNAMIC +0+11[0-9a-f]+ 0+1[0-9a-f]+ 0+140 10 +WA +3 +0 +8
+ \[13\] .got +PROGBITS +0+112d8 0+12d8 0+50 00 WAp +0 +0 +8
+ \[14\] .IA_64.pltoff +.*
+ \[15\] .shstrtab +.*
+ \[16\] .symtab +.*
+ \[17\] .strtab +.*
+Key to Flags:
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are 5 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 *
+.* SECTION LOCAL +DEFAULT +7 *
+.* SECTION LOCAL +DEFAULT +8 *
+.* SECTION LOCAL +DEFAULT +10 *
+.* SECTION LOCAL +DEFAULT +11 *
+.* SECTION LOCAL +DEFAULT +14 *
+.* 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 57 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 *
+.* SECTION LOCAL +DEFAULT +16 *
+.* SECTION LOCAL +DEFAULT +17 *
+.* 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 +HIDDEN +11 sH1
+.* OBJECT +LOCAL +HIDDEN +ABS _DYNAMIC
+.* TLS +LOCAL +HIDDEN +10 sh3
+.* TLS +LOCAL +HIDDEN +11 sH2
+.* TLS +LOCAL +HIDDEN +11 sH7
+.* TLS +LOCAL +HIDDEN +10 sh7
+.* TLS +LOCAL +HIDDEN +10 sh8
+.* TLS +LOCAL +HIDDEN +11 sH4
+.* TLS +LOCAL +HIDDEN +10 sh4
+.* TLS +LOCAL +HIDDEN +11 sH3
+.* TLS +LOCAL +HIDDEN +10 sh5
+.* TLS +LOCAL +HIDDEN +11 sH5
+.* TLS +LOCAL +HIDDEN +11 sH6
+.* TLS +LOCAL +HIDDEN +11 sH8
+.* TLS +LOCAL +HIDDEN +10 sh1
+.* OBJECT +LOCAL +HIDDEN +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +HIDDEN +10 sh2
+.* TLS +LOCAL +HIDDEN +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.17/ld/testsuite/ld-ia64/tlspic.sd b/binutils-2.17/ld/testsuite/ld-ia64/tlspic.sd
new file mode 100644
index 00000000..7b03a084
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlspic.td b/binutils-2.17/ld/testsuite/ld-ia64/tlspic.td
new file mode 100644
index 00000000..47b5b6cc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlspic1.s b/binutils-2.17/ld/testsuite/ld-ia64/tlspic1.s
new file mode 100644
index 00000000..5242d28b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-ia64/tlspic2.s b/binutils-2.17/ld/testsuite/ld-ia64/tlspic2.s
new file mode 100644
index 00000000..5513f9b5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-linkonce/linkonce.exp b/binutils-2.17/ld/testsuite/ld-linkonce/linkonce.exp
new file mode 100644
index 00000000..9880443f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-linkonce/linkonce.exp
@@ -0,0 +1,43 @@
+# Expect script for ld linkonce tests
+# Copyright 2001, 2002 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-linkonce/x.s b/binutils-2.17/ld/testsuite/ld-linkonce/x.s
new file mode 100644
index 00000000..6807cfcd
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-linkonce/x.s
@@ -0,0 +1,26 @@
+;# 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. There's the equivalent of an FDE
+;# entry in .eh_frame, referring to fn via a local label.
+
+ .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 .eh_frame,"aw",@progbits
+ .long 2
+ .long .La
+ .long .Lb-.La
diff --git a/binutils-2.17/ld/testsuite/ld-linkonce/y.s b/binutils-2.17/ld/testsuite/ld-linkonce/y.s
new file mode 100644
index 00000000..b8ae3d29
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-linkonce/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
+;# .eh_frame 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 .eh_frame,"aw",@progbits
+ .long 7
+ .long .Lc
+ .long .Ld-.Lc
+
+ .long 0x6066
+ .long .Le
+ .long .Lf-.Le
diff --git a/binutils-2.17/ld/testsuite/ld-linkonce/zeroeh.ld b/binutils-2.17/ld/testsuite/ld-linkonce/zeroeh.ld
new file mode 100644
index 00000000..6550c17d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-linkonce/zeroeh.ld
@@ -0,0 +1,4 @@
+SECTIONS {
+ .text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
+ .eh_frame 0x2000 : { *(.eh_frame) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-linkonce/zeroehl32.d b/binutils-2.17/ld/testsuite/ld-linkonce/zeroehl32.d
new file mode 100644
index 00000000..b84ebed3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-linkonce/zeroehl32.d
@@ -0,0 +1,18 @@
+#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 \.eh_frame:
+ 2000 02000000 080a0000 08000000 07000000 .*
+ 2010 100a0000 04000000 66600000 00000000 .*
+ 2020 04000000 .*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-m68hc11/adj-brset.d b/binutils-2.17/ld/testsuite/ld-m68hc11/adj-brset.d
new file mode 100644
index 00000000..f1788f7f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/adj-brset.s b/binutils-2.17/ld/testsuite/ld-m68hc11/adj-brset.s
new file mode 100644
index 00000000..1aaff41c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/adj-jump.d b/binutils-2.17/ld/testsuite/ld-m68hc11/adj-jump.d
new file mode 100644
index 00000000..be875247
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/adj-jump.s b/binutils-2.17/ld/testsuite/ld-m68hc11/adj-jump.s
new file mode 100644
index 00000000..99b7258d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/bug-1403.d b/binutils-2.17/ld/testsuite/ld-m68hc11/bug-1403.d
new file mode 100644
index 00000000..c643cd16
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/bug-1403.s b/binutils-2.17/ld/testsuite/ld-m68hc11/bug-1403.s
new file mode 100644
index 00000000..9c6fc9b4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/bug-1417.d b/binutils-2.17/ld/testsuite/ld-m68hc11/bug-1417.d
new file mode 100644
index 00000000..84b3ad45
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/bug-1417.s b/binutils-2.17/ld/testsuite/ld-m68hc11/bug-1417.s
new file mode 100644
index 00000000..2b3e6a1a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/bug-3331.d b/binutils-2.17/ld/testsuite/ld-m68hc11/bug-3331.d
new file mode 100644
index 00000000..91050bf7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/bug-3331.s b/binutils-2.17/ld/testsuite/ld-m68hc11/bug-3331.s
new file mode 100644
index 00000000..19a32014
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/far-hc11.d b/binutils-2.17/ld/testsuite/ld-m68hc11/far-hc11.d
new file mode 100644
index 00000000..e3805111
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/far-hc11.s b/binutils-2.17/ld/testsuite/ld-m68hc11/far-hc11.s
new file mode 100644
index 00000000..e8e63d47
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/far-hc12.d b/binutils-2.17/ld/testsuite/ld-m68hc11/far-hc12.d
new file mode 100644
index 00000000..304ae870
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/far-hc12.ld b/binutils-2.17/ld/testsuite/ld-m68hc11/far-hc12.ld
new file mode 100644
index 00000000..78dffe68
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/far-hc12.s b/binutils-2.17/ld/testsuite/ld-m68hc11/far-hc12.s
new file mode 100644
index 00000000..0081e387
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/link-hc12.s b/binutils-2.17/ld/testsuite/ld-m68hc11/link-hc12.s
new file mode 100644
index 00000000..43b97c54
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/link-hcs12.d b/binutils-2.17/ld/testsuite/ld-m68hc11/link-hcs12.d
new file mode 100644
index 00000000..f243da24
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/link-hcs12.s b/binutils-2.17/ld/testsuite/ld-m68hc11/link-hcs12.s
new file mode 100644
index 00000000..868d4cf3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/m68hc11.exp b/binutils-2.17/ld/testsuite/ld-m68hc11/m68hc11.exp
new file mode 100644
index 00000000..abf138e2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68hc11/m68hc11.exp
@@ -0,0 +1,31 @@
+# Expect script for run_dump_test based ld-m68hc11 tests.
+# Copyright 2002 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-m68hc11/relax-direct.d b/binutils-2.17/ld/testsuite/ld-m68hc11/relax-direct.d
new file mode 100644
index 00000000..9bd0822a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/relax-direct.s b/binutils-2.17/ld/testsuite/ld-m68hc11/relax-direct.s
new file mode 100644
index 00000000..f4497726
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/relax-group.d b/binutils-2.17/ld/testsuite/ld-m68hc11/relax-group.d
new file mode 100644
index 00000000..baf294b4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68hc11/relax-group.s b/binutils-2.17/ld/testsuite/ld-m68hc11/relax-group.s
new file mode 100644
index 00000000..41c55f51
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68k/isaa-mac.d b/binutils-2.17/ld/testsuite/ld-m68k/isaa-mac.d
new file mode 100644
index 00000000..79b809a0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68k/isaa-mac.s b/binutils-2.17/ld/testsuite/ld-m68k/isaa-mac.s
new file mode 100644
index 00000000..e3ec277c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/isaa-mac.s
@@ -0,0 +1,3 @@
+ .arch isaa,mac
+
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/isaa-nodiv.s b/binutils-2.17/ld/testsuite/ld-m68k/isaa-nodiv.s
new file mode 100644
index 00000000..de327f1e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/isaa-nodiv.s
@@ -0,0 +1,3 @@
+ .arch isaa,no-div
+
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/isaa.d b/binutils-2.17/ld/testsuite/ld-m68k/isaa.d
new file mode 100644
index 00000000..48e4fa27
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68k/isaa.s b/binutils-2.17/ld/testsuite/ld-m68k/isaa.s
new file mode 100644
index 00000000..f4675c13
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/isaa.s
@@ -0,0 +1,3 @@
+ .arch isaa
+
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/isaaplus.d b/binutils-2.17/ld/testsuite/ld-m68k/isaaplus.d
new file mode 100644
index 00000000..88623ce7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68k/isaaplus.s b/binutils-2.17/ld/testsuite/ld-m68k/isaaplus.s
new file mode 100644
index 00000000..5b0a0b82
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/isaaplus.s
@@ -0,0 +1,3 @@
+ .arch isaaplus
+
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/isab-float.d b/binutils-2.17/ld/testsuite/ld-m68k/isab-float.d
new file mode 100644
index 00000000..3547ea71
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68k/isab-float.s b/binutils-2.17/ld/testsuite/ld-m68k/isab-float.s
new file mode 100644
index 00000000..3889d0d6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/isab-float.s
@@ -0,0 +1,3 @@
+ .arch isab,float
+
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/isab-nousp.s b/binutils-2.17/ld/testsuite/ld-m68k/isab-nousp.s
new file mode 100644
index 00000000..1e523577
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/isab-nousp.s
@@ -0,0 +1,3 @@
+ .arch isab,no-usp
+
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/isab.d b/binutils-2.17/ld/testsuite/ld-m68k/isab.d
new file mode 100644
index 00000000..c5b01345
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68k/isab.s b/binutils-2.17/ld/testsuite/ld-m68k/isab.s
new file mode 100644
index 00000000..3f93db75
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/isab.s
@@ -0,0 +1,3 @@
+ .arch isab
+
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/m68k.exp b/binutils-2.17/ld/testsuite/ld-m68k/m68k.exp
new file mode 100644
index 00000000..a1096a81
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/m68k.exp
@@ -0,0 +1,55 @@
+# Expect script for run_dump_test based ld-m68k tests.
+# Copyright 2006 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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"}
+ {"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"
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1a.d b/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1a.d
new file mode 100644
index 00000000..ab3ef6e8
--- /dev/null
+++ b/binutils-2.17/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
+#warning: .*
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1a.s b/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1a.s
new file mode 100644
index 00000000..ee489426
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1a.s
@@ -0,0 +1 @@
+ rts
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1b.d b/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1b.d
new file mode 100644
index 00000000..291d42ff
--- /dev/null
+++ b/binutils-2.17/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
+#warning: .*
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1b.s b/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1b.s
new file mode 100644
index 00000000..ee489426
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1b.s
@@ -0,0 +1 @@
+ rts
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1c.d b/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1c.d
new file mode 100644
index 00000000..e7452809
--- /dev/null
+++ b/binutils-2.17/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
+#warning: .*
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1d.d b/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1d.d
new file mode 100644
index 00000000..310bf432
--- /dev/null
+++ b/binutils-2.17/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
+#warning: .*
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1e.d b/binutils-2.17/ld/testsuite/ld-m68k/merge-error-1e.d
new file mode 100644
index 00000000..87a2bf93
--- /dev/null
+++ b/binutils-2.17/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
+#warning: .*
diff --git a/binutils-2.17/ld/testsuite/ld-m68k/merge-ok-1a.d b/binutils-2.17/ld/testsuite/ld-m68k/merge-ok-1a.d
new file mode 100644
index 00000000..96da5563
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68k/merge-ok-1b.d b/binutils-2.17/ld/testsuite/ld-m68k/merge-ok-1b.d
new file mode 100644
index 00000000..03ae2587
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-m68k/merge.ld b/binutils-2.17/ld/testsuite/ld-m68k/merge.ld
new file mode 100644
index 00000000..ed2acfe1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-maxq/addend.dd b/binutils-2.17/ld/testsuite/ld-maxq/addend.dd
new file mode 100644
index 00000000..5cd8b320
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/addend.dd
@@ -0,0 +1,21 @@
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <_main>:
+ 0: 78 56 [ ]*MOVE 56h, #78h
+ ...
+
+00000004 <_buf1>:
+ 4: 34 12 [ ]*MOVE 12h, #34h
+ ...
+
+00000008 <_start>:
+ 8: 3a da [ ]*NOP
+ a: 3a da [ ]*NOP
+ c: 00 0b [ ]*MOVE PFX\[0\], #00h
+ e: 03 09 [ ]*MOVE A\[0\], #03h
+ 10: 00 0b [ ]*MOVE PFX\[0\], #00h
+ 12: 01 09 [ ]*MOVE A\[0\], #01h
+ 14: fa 3d [ ]*CALL #fah
+ 16: f8 3d [ ]*CALL #f8h
diff --git a/binutils-2.17/ld/testsuite/ld-maxq/addend.s b/binutils-2.17/ld/testsuite/ld-maxq/addend.s
new file mode 100644
index 00000000..a5ca450b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/addend.s
@@ -0,0 +1,16 @@
+; Addend check testcases
+; inderpreetb@noida.hcltech.com
+.global _main
+_main:
+_buf0:
+ .long 0x5678
+_buf1:
+ .long 0x1234
+_start:
+ nop
+ nop
+ move A[0], _buf1+2
+ move A[0], _buf1-2
+ call _buf0+8
+ call _buf1+2
+
diff --git a/binutils-2.17/ld/testsuite/ld-maxq/maxq.exp b/binutils-2.17/ld/testsuite/ld-maxq/maxq.exp
new file mode 100644
index 00000000..ed4f1f18
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/maxq.exp
@@ -0,0 +1,52 @@
+# Expect script for ld-maxq tests
+# Copyright (C) 2004 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Written by inderpreetb@noida.hcltech.com
+
+# Test maxq linking; all types of relocs. This tests the assembler and
+# tools like objdump as well as the linker.
+
+if { !([istarget "maxq*-*-*"] ) } {
+ 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 maxqtests {
+{"32-bit Relocation check" "" ""
+{r32-1.s r32-2.s} {{objdump -drw r32.dd}}
+"r32.o" }
+{"maxq addend check" "" ""
+{addend.s} {{objdump -dw addend.dd}}
+"addendo.o" }
+{"16bit relocation test" "" ""
+{paddr.s} {{objdump -Dw paddr.dd}}
+"paddro.o" }
+{"16bit relocation test-1" "" ""
+{paddr1.s} {{objdump -Dw paddr1.dd}}
+"paddro1.o" }
+
+}
+
+run_ld_link_tests $maxqtests
diff --git a/binutils-2.17/ld/testsuite/ld-maxq/paddr.dd b/binutils-2.17/ld/testsuite/ld-maxq/paddr.dd
new file mode 100644
index 00000000..8f5ab487
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/paddr.dd
@@ -0,0 +1,16 @@
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 12 09 [ ]*MOVE A\[0\], #12h
+ 2: 3a da [ ]*NOP
+ 4: 3a da [ ]*NOP
+ ...
+Disassembly of section .data:
+
+0000a000 <lb>:
+ a000: 23 00 [ ]*MOVE 00h, #23h
+
+0000a002 <plc>:
+ a002: 00 a0 [ ]*MOVE 20h, 00h
diff --git a/binutils-2.17/ld/testsuite/ld-maxq/paddr.s b/binutils-2.17/ld/testsuite/ld-maxq/paddr.s
new file mode 100644
index 00000000..693da885
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/paddr.s
@@ -0,0 +1,14 @@
+.text
+main:
+
+ move A[0], #12h
+ nop
+ nop
+
+
+
+.data
+
+lb: .word 0x23
+plc: .word lb
+
diff --git a/binutils-2.17/ld/testsuite/ld-maxq/paddr1.dd b/binutils-2.17/ld/testsuite/ld-maxq/paddr1.dd
new file mode 100644
index 00000000..1297b833
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/paddr1.dd
@@ -0,0 +1,18 @@
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <main>:
+ 0: 12 09 MOVE A\[0\], #12h
+ 2: 3a da NOP
+ 4: 3a da NOP
+ ...
+Disassembly of section .data:
+
+0000a000 <lb>:
+ a000: 23 00 MOVE 00h, #23h
+ ...
+
+0000a004 <plc>:
+ a004: 00 a0 MOVE 20h, 00h
+ ...
diff --git a/binutils-2.17/ld/testsuite/ld-maxq/paddr1.s b/binutils-2.17/ld/testsuite/ld-maxq/paddr1.s
new file mode 100644
index 00000000..2f3d1659
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/paddr1.s
@@ -0,0 +1,10 @@
+.text
+main:
+
+ move A[0], #12h
+ nop
+ nop
+.data
+
+lb: .long 0x23
+plc: .long lb
diff --git a/binutils-2.17/ld/testsuite/ld-maxq/r32-1.s b/binutils-2.17/ld/testsuite/ld-maxq/r32-1.s
new file mode 100644
index 00000000..9cf38c1a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/r32-1.s
@@ -0,0 +1,20 @@
+; Test the intersegment relocation
+; Inderpreetb@noida.hcltech.com
+
+.global _start
+.extern _main
+_start:
+ call _main
+ nop
+ nop
+ nop
+ nop
+.global _exit
+_exit:
+ nop
+ nop
+ nop
+.global _abort
+_abort:
+ nop
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-maxq/r32-2.s b/binutils-2.17/ld/testsuite/ld-maxq/r32-2.s
new file mode 100644
index 00000000..49bb59e8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/r32-2.s
@@ -0,0 +1,13 @@
+;
+; test the intersegment relocation
+; inderpreetb@noida.hcltech.com
+.extern _start
+.extern _abort
+.extern _exit
+.global _main
+_main:
+ call _exit
+ call _abort
+ ljump _abort
+ ljump _exit
+
diff --git a/binutils-2.17/ld/testsuite/ld-maxq/r32.dd b/binutils-2.17/ld/testsuite/ld-maxq/r32.dd
new file mode 100644
index 00000000..f245ca95
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-maxq/r32.dd
@@ -0,0 +1,31 @@
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <_start>:
+ 0: 00 0b [ ]*MOVE PFX\[0\], #00h
+ 2: 0c 3d [ ]*CALL #0ch
+ 4: 3a da [ ]*NOP
+ 6: 3a da [ ]*NOP
+ 8: 3a da [ ]*NOP
+ a: 3a da [ ]*NOP
+
+0000000c <_exit>:
+ c: 3a da [ ]*NOP
+ e: 3a da [ ]*NOP
+ 10: 3a da [ ]*NOP
+
+00000012 <_abort>:
+ 12: 3a da [ ]*NOP
+ 14: 3a da [ ]*NOP
+ ...
+
+00000018 <_main>:
+ 18: 00 0b [ ]*MOVE PFX\[0\], #00h
+ 1a: 06 3d [ ]*CALL #06h
+ 1c: 00 0b [ ]*MOVE PFX\[0\], #00h
+ 1e: 09 3d [ ]*CALL #09h
+ 20: 00 0b [ ]*MOVE PFX\[0\], #00h
+ 22: 09 0c [ ]*JUMP #09h
+ 24: 00 0b [ ]*MOVE PFX\[0\], #00h
+ 26: 06 0c [ ]*JUMP #06h
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/branch-misc-1.d b/binutils-2.17/ld/testsuite/ld-mips-elf/branch-misc-1.d
new file mode 100644
index 00000000..36bceb79
--- /dev/null
+++ b/binutils-2.17/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 0x500000 -e 0x500000 -N
+
+.*: file format elf.*mips.*
+
+#...
+
+Disassembly of section \.text:
+ \.\.\.
+ \.\.\.
+ \.\.\.
+0+50003c <[^>]*> 0411fff0 bal 0+500000 <[^>]*>
+0+500040 <[^>]*> 00000000 nop
+0+500044 <[^>]*> 0411fff3 bal 0+500014 <[^>]*>
+0+500048 <[^>]*> 00000000 nop
+0+50004c <[^>]*> 0411fff6 bal 0+500028 <[^>]*>
+0+500050 <[^>]*> 00000000 nop
+0+500054 <[^>]*> 0411000a bal 0+500080 <[^>]*>
+0+500058 <[^>]*> 00000000 nop
+0+50005c <[^>]*> 0411000d bal 0+500094 <[^>]*>
+0+500060 <[^>]*> 00000000 nop
+0+500064 <[^>]*> 04110010 bal 0+5000a8 <[^>]*>
+0+500068 <[^>]*> 00000000 nop
+ \.\.\.
+ \.\.\.
+ \.\.\.
+ \.\.\.
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1-n32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1-n32.d
new file mode 100644
index 00000000..4e332195
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1-n32.d
@@ -0,0 +1,263 @@
+#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
+
+Relocation section '\.rel\.dyn' .*:
+ *Offset .*
+00000000 00000000 R_MIPS_NONE *
+# Initial PCs for the FDEs attached to CIE 0xbc
+000300dc 00000003 R_MIPS_REL32 *
+000300f0 00000003 R_MIPS_REL32 *
+# Likewise CIE 0x220
+00030240 00000003 R_MIPS_REL32 *
+00030254 00000003 R_MIPS_REL32 *
+0003008b 00000503 R_MIPS_REL32 00000000 foo
+000300d0 00000503 R_MIPS_REL32 00000000 foo
+0003010e 00000503 R_MIPS_REL32 00000000 foo
+000301ef 00000503 R_MIPS_REL32 00000000 foo
+00030234 00000503 R_MIPS_REL32 00000000 foo
+00030272 00000503 R_MIPS_REL32 00000000 foo
+#...
+The section \.eh_frame contains:
+
+00000000 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ 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: 10 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 10
+
+ 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 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+
+00000164 00000010 00000018 FDE cie=00000150 pc=000201d0..000201e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic1 removed, followed by repeat of above
+00000178 00000010 0000002c FDE cie=00000150 pc=000201e0..000201f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000018c 00000010 00000040 FDE cie=00000150 pc=000201f0..00020210
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001a0 00000010 00000054 FDE cie=00000150 pc=00020210..00020240
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001b4 00000010 00000068 FDE cie=00000150 pc=00020240..00020280
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001c8 00000010 0000007c FDE cie=00000150 pc=00020280..000202d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001dc 00000018 00000000 CIE
+ Version: 1
+ Augmentation: "zRP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10 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
+
+000001f8 00000010 00000020 FDE cie=000001dc pc=000202d0..000202e0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+ DW_CFA_advance_loc: 0 to 000202d0
+
+0000020c 00000010 00000034 FDE cie=000001dc pc=000202e0..00020300
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+ DW_CFA_advance_loc: 0 to 000202e0
+
+00000220 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
+
+
+00000238 00000010 0000001c FDE cie=00000220 pc=00020300..00020310
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+ DW_CFA_advance_loc: 0 to 00020300
+
+0000024c 00000010 00000030 FDE cie=00000220 pc=00020310..00020330
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+ DW_CFA_advance_loc: 0 to 00020310
+
+00000260 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 10
+
+ DW_CFA_advance_loc: 0 to 00000000
+
+00000278 00000010 0000001c FDE cie=00000260 pc=00020330..00020340
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+ DW_CFA_advance_loc: 0 to 00020330
+
+0000028c 00000010 00000030 FDE cie=00000260 pc=00020340..00020370
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+ DW_CFA_advance_loc: 0 to 00020340
+
+000002a0 00000010 00000044 FDE cie=00000260 pc=00020370..000203b0
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+ DW_CFA_advance_loc: 0 to 00020370
+
+000002b4 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+ DW_CFA_advance_loc: 0 to 00000000
+
+000002c8 00000010 00000018 FDE cie=000002b4 pc=000203b0..000203c0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1-n64.d b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1-n64.d
new file mode 100644
index 00000000..2b175e05
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1-n64.d
@@ -0,0 +1,425 @@
+#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
+
+Relocation section '\.rel\.dyn' .*:
+ *Offset .*
+000000000000 000000000000 R_MIPS_NONE *
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
+# Initial PCs for the FDEs attached to CIE 0x120
+000000030148 000000001203 R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030168 000000001203 R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+# Likewise CIE 0x340
+000000030368 000000001203 R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030388 000000001203 R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+0000000300cb 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030138 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030192 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+0000000302eb 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030358 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+0000000303b2 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+#...
+The section \.eh_frame contains:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ 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: 10 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 10
+
+ 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 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ 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
+
+00000218 0000001c 0000001c FDE cie=00000200 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
+00000238 0000001c 0000003c FDE cie=00000200 pc=000201e0..000201f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000258 0000001c 0000005c FDE cie=00000200 pc=000201f0..00020210
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000278 0000001c 0000007c FDE cie=00000200 pc=00020210..00020240
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000298 0000001c 0000009c FDE cie=00000200 pc=00020240..00020280
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002b8 0000001c 000000bc FDE cie=00000200 pc=00020280..000202d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002d8 00000024 00000000 CIE
+ Version: 1
+ Augmentation: "zRP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10 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
+
+00000300 0000001c 0000002c FDE cie=000002d8 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
+
+00000320 0000001c 0000004c FDE cie=000002d8 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
+
+00000340 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
+
+
+00000360 0000001c 00000024 FDE cie=00000340 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
+
+00000380 0000001c 00000044 FDE cie=00000340 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
+
+000003a0 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 10
+
+ 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
+
+000003c0 0000001c 00000024 FDE cie=000003a0 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
+
+000003e0 0000001c 00000044 FDE cie=000003a0 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
+
+00000400 0000001c 00000064 FDE cie=000003a0 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
+
+00000420 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ 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
+
+00000438 0000001c 0000001c FDE cie=00000420 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.17/ld/testsuite/ld-mips-elf/eh-frame1.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1.ld
new file mode 100644
index 00000000..93c49729
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/eh-frame1.s b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame1.s
new file mode 100644
index 00000000..94ed70d4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/eh-frame2-n32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame2-n32.d
new file mode 100644
index 00000000..13456586
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame2-n32.d
@@ -0,0 +1,255 @@
+#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
+
+Relocation section '\.rel\.dyn' .*:
+ *Offset .*
+00000000 00000000 R_MIPS_NONE *
+# Initial PCs for the FDEs attached to CIE 0xb8
+000300d8 00000003 R_MIPS_REL32 *
+000300ec 00000003 R_MIPS_REL32 *
+# Likewise CIE 0x218
+00030238 00000003 R_MIPS_REL32 *
+0003024c 00000003 R_MIPS_REL32 *
+0003008b 00000503 R_MIPS_REL32 00000000 foo
+000300cc 00000503 R_MIPS_REL32 00000000 foo
+0003010a 00000503 R_MIPS_REL32 00000000 foo
+000301eb 00000503 R_MIPS_REL32 00000000 foo
+0003022c 00000503 R_MIPS_REL32 00000000 foo
+0003026a 00000503 R_MIPS_REL32 00000000 foo
+#...
+The section \.eh_frame contains:
+
+00000000 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ 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: 10 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 10
+
+ 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 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000160 00000010 00000018 FDE cie=0000014c pc=000201d0..000201e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+# basic1 removed, followed by repeat of above
+00000174 00000010 0000002c FDE cie=0000014c pc=000201e0..000201f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000188 00000010 00000040 FDE cie=0000014c pc=000201f0..00020210
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+0000019c 00000010 00000054 FDE cie=0000014c pc=00020210..00020240
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001b0 00000010 00000068 FDE cie=0000014c pc=00020240..00020280
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001c4 00000010 0000007c FDE cie=0000014c pc=00020280..000202d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000001d8 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zRP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10 00 00 00 00 00
+
+ DW_CFA_nop
+
+000001f0 00000010 0000001c FDE cie=000001d8 pc=000202d0..000202e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000204 00000010 00000030 FDE cie=000001d8 pc=000202e0..00020300
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000218 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
+
+
+00000230 00000010 0000001c FDE cie=00000218 pc=00020300..00020310
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000244 00000010 00000030 FDE cie=00000218 pc=00020310..00020330
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000258 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 10
+
+ DW_CFA_nop
+
+00000270 00000010 0000001c FDE cie=00000258 pc=00020330..00020340
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000284 00000010 00000030 FDE cie=00000258 pc=00020340..00020370
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000298 00000010 00000044 FDE cie=00000258 pc=00020370..000203b0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002ac 00000010 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002c0 00000010 00000018 FDE cie=000002ac pc=000203b0..000203c0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame2-n64.d b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame2-n64.d
new file mode 100644
index 00000000..b817bbc6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame2-n64.d
@@ -0,0 +1,409 @@
+#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
+
+Relocation section '\.rel\.dyn' .*:
+ *Offset .*
+000000000000 000000000000 R_MIPS_NONE *
+ *Type2: R_MIPS_NONE *
+ *Type3: R_MIPS_NONE *
+# Initial PCs for the FDEs attached to CIE 0x118
+000000030140 000000001203 R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030160 000000001203 R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+# Likewise CIE 0x330
+000000030358 000000001203 R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030378 000000001203 R_MIPS_REL32 *
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+0000000300cb 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030130 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+00000003018a 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+0000000302e3 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+000000030348 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+0000000303a2 000500001203 R_MIPS_REL32 0000000000000000 foo
+ *Type2: R_MIPS_64 *
+ *Type3: R_MIPS_NONE *
+#...
+The section \.eh_frame contains:
+
+00000000 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ 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: 10 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 10
+
+ 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 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000210 0000001c 0000001c FDE cie=000001f8 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
+00000230 0000001c 0000003c FDE cie=000001f8 pc=000201e0..000201f0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000250 0000001c 0000005c FDE cie=000001f8 pc=000201f0..00020210
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000270 0000001c 0000007c FDE cie=000001f8 pc=00020210..00020240
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000290 0000001c 0000009c FDE cie=000001f8 pc=00020240..00020280
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002b0 0000001c 000000bc FDE cie=000001f8 pc=00020280..000202d0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002d0 0000001c 00000000 CIE
+ Version: 1
+ Augmentation: "zRP"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10 00 00 00 00 00 00 00 00 00
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000002f0 0000001c 00000024 FDE cie=000002d0 pc=000202d0..000202e0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000310 0000001c 00000044 FDE cie=000002d0 pc=000202e0..00020300
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000330 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
+
+
+00000350 0000001c 00000024 FDE cie=00000330 pc=00020300..00020310
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000370 0000001c 00000044 FDE cie=00000330 pc=00020310..00020330
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000390 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 10
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000003b0 0000001c 00000024 FDE cie=00000390 pc=00020330..00020340
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000003d0 0000001c 00000044 FDE cie=00000390 pc=00020340..00020370
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+000003f0 0000001c 00000064 FDE cie=00000390 pc=00020370..000203b0
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000410 00000014 00000000 CIE
+ Version: 1
+ Augmentation: "zR"
+ Code alignment factor: 1
+ Data alignment factor: 4
+ Return address column: 31
+ Augmentation data: 10
+
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+ DW_CFA_nop
+
+00000428 0000001c 0000001c FDE cie=00000410 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.17/ld/testsuite/ld-mips-elf/eh-frame3.d b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame3.d
new file mode 100644
index 00000000..4c91d2c6
--- /dev/null
+++ b/binutils-2.17/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.
+#
+
+The section \.eh_frame contains:
+
+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.17/ld/testsuite/ld-mips-elf/eh-frame4.d b/binutils-2.17/ld/testsuite/ld-mips-elf/eh-frame4.d
new file mode 100644
index 00000000..e04d5fc8
--- /dev/null
+++ b/binutils-2.17/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.
+#
+
+The section \.eh_frame contains:
+
+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.17/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d
new file mode 100644
index 00000000..5b3df078
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n32.d
@@ -0,0 +1,314 @@
+#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 \.text:
+
+100000a0 <fn>:
+100000a0: 8f858064 lw a1,-32668\(gp\)
+100000a4: 8f858064 lw a1,-32668\(gp\)
+100000a8: 24a5000c addiu a1,a1,12
+100000ac: 8f858064 lw a1,-32668\(gp\)
+100000b0: 3c010001 lui at,0x1
+100000b4: 3421e240 ori at,at,0xe240
+100000b8: 00a12821 addu a1,a1,at
+100000bc: 8f858064 lw a1,-32668\(gp\)
+100000c0: 00b12821 addu a1,a1,s1
+100000c4: 8f858064 lw a1,-32668\(gp\)
+100000c8: 24a5000c addiu a1,a1,12
+100000cc: 00b12821 addu a1,a1,s1
+100000d0: 8f858064 lw a1,-32668\(gp\)
+100000d4: 3c010001 lui at,0x1
+100000d8: 3421e240 ori at,at,0xe240
+100000dc: 00a12821 addu a1,a1,at
+100000e0: 00b12821 addu a1,a1,s1
+100000e4: 8f858018 lw a1,-32744\(gp\)
+100000e8: 8ca5050c lw a1,1292\(a1\)
+100000ec: 8f858018 lw a1,-32744\(gp\)
+100000f0: 8ca50518 lw a1,1304\(a1\)
+100000f4: 8f858018 lw a1,-32744\(gp\)
+100000f8: 00b12821 addu a1,a1,s1
+100000fc: 8ca5050c lw a1,1292\(a1\)
+10000100: 8f858018 lw a1,-32744\(gp\)
+10000104: 00b12821 addu a1,a1,s1
+10000108: 8ca50518 lw a1,1304\(a1\)
+1000010c: 8f818018 lw at,-32744\(gp\)
+10000110: 00250821 addu at,at,a1
+10000114: 8c25052e lw a1,1326\(at\)
+10000118: 8f818018 lw at,-32744\(gp\)
+1000011c: 00250821 addu at,at,a1
+10000120: ac250544 sw a1,1348\(at\)
+10000124: 8f818064 lw at,-32668\(gp\)
+10000128: 88250000 lwl a1,0\(at\)
+1000012c: 98250003 lwr a1,3\(at\)
+10000130: 8f818064 lw at,-32668\(gp\)
+10000134: 2421000c addiu at,at,12
+10000138: 88250000 lwl a1,0\(at\)
+1000013c: 98250003 lwr a1,3\(at\)
+10000140: 8f818064 lw at,-32668\(gp\)
+10000144: 00310821 addu at,at,s1
+10000148: 88250000 lwl a1,0\(at\)
+1000014c: 98250003 lwr a1,3\(at\)
+10000150: 8f818064 lw at,-32668\(gp\)
+10000154: 2421000c addiu at,at,12
+10000158: 00310821 addu at,at,s1
+1000015c: 88250000 lwl a1,0\(at\)
+10000160: 98250003 lwr a1,3\(at\)
+10000164: 8f818064 lw at,-32668\(gp\)
+10000168: 24210022 addiu at,at,34
+1000016c: 00250821 addu at,at,a1
+10000170: 88250000 lwl a1,0\(at\)
+10000174: 98250003 lwr a1,3\(at\)
+10000178: 8f818064 lw at,-32668\(gp\)
+1000017c: 24210038 addiu at,at,56
+10000180: 00250821 addu at,at,a1
+10000184: a8250000 swl a1,0\(at\)
+10000188: b8250003 swr a1,3\(at\)
+1000018c: 8f85801c lw a1,-32740\(gp\)
+10000190: 8f858020 lw a1,-32736\(gp\)
+10000194: 8f858024 lw a1,-32732\(gp\)
+10000198: 8f85801c lw a1,-32740\(gp\)
+1000019c: 00b12821 addu a1,a1,s1
+100001a0: 8f858020 lw a1,-32736\(gp\)
+100001a4: 00b12821 addu a1,a1,s1
+100001a8: 8f858024 lw a1,-32732\(gp\)
+100001ac: 00b12821 addu a1,a1,s1
+100001b0: 8f858018 lw a1,-32744\(gp\)
+100001b4: 8ca5050c lw a1,1292\(a1\)
+100001b8: 8f858018 lw a1,-32744\(gp\)
+100001bc: 8ca50518 lw a1,1304\(a1\)
+100001c0: 8f858018 lw a1,-32744\(gp\)
+100001c4: 00b12821 addu a1,a1,s1
+100001c8: 8ca5050c lw a1,1292\(a1\)
+100001cc: 8f858018 lw a1,-32744\(gp\)
+100001d0: 00b12821 addu a1,a1,s1
+100001d4: 8ca50518 lw a1,1304\(a1\)
+100001d8: 8f818018 lw at,-32744\(gp\)
+100001dc: 00250821 addu at,at,a1
+100001e0: 8c25052e lw a1,1326\(at\)
+100001e4: 8f818018 lw at,-32744\(gp\)
+100001e8: 00250821 addu at,at,a1
+100001ec: ac250544 sw a1,1348\(at\)
+100001f0: 8f81801c lw at,-32740\(gp\)
+100001f4: 88250000 lwl a1,0\(at\)
+100001f8: 98250003 lwr a1,3\(at\)
+100001fc: 8f818020 lw at,-32736\(gp\)
+10000200: 88250000 lwl a1,0\(at\)
+10000204: 98250003 lwr a1,3\(at\)
+10000208: 8f81801c lw at,-32740\(gp\)
+1000020c: 00310821 addu at,at,s1
+10000210: 88250000 lwl a1,0\(at\)
+10000214: 98250003 lwr a1,3\(at\)
+10000218: 8f818020 lw at,-32736\(gp\)
+1000021c: 00310821 addu at,at,s1
+10000220: 88250000 lwl a1,0\(at\)
+10000224: 98250003 lwr a1,3\(at\)
+10000228: 8f818028 lw at,-32728\(gp\)
+1000022c: 00250821 addu at,at,a1
+10000230: 88250000 lwl a1,0\(at\)
+10000234: 98250003 lwr a1,3\(at\)
+10000238: 8f81802c lw at,-32724\(gp\)
+1000023c: 00250821 addu at,at,a1
+10000240: a8250000 swl a1,0\(at\)
+10000244: b8250003 swr a1,3\(at\)
+10000248: 8f85805c lw a1,-32676\(gp\)
+1000024c: 8f858030 lw a1,-32720\(gp\)
+10000250: 8f99805c lw t9,-32676\(gp\)
+10000254: 8f998030 lw t9,-32720\(gp\)
+10000258: 8f99805c lw t9,-32676\(gp\)
+1000025c: 0320f809 jalr t9
+10000260: 00000000 nop
+10000264: 8f998030 lw t9,-32720\(gp\)
+10000268: 0320f809 jalr t9
+1000026c: 00000000 nop
+10000270: 8f858068 lw a1,-32664\(gp\)
+10000274: 8f858068 lw a1,-32664\(gp\)
+10000278: 24a5000c addiu a1,a1,12
+1000027c: 8f858068 lw a1,-32664\(gp\)
+10000280: 3c010001 lui at,0x1
+10000284: 3421e240 ori at,at,0xe240
+10000288: 00a12821 addu a1,a1,at
+1000028c: 8f858068 lw a1,-32664\(gp\)
+10000290: 00b12821 addu a1,a1,s1
+10000294: 8f858068 lw a1,-32664\(gp\)
+10000298: 24a5000c addiu a1,a1,12
+1000029c: 00b12821 addu a1,a1,s1
+100002a0: 8f858068 lw a1,-32664\(gp\)
+100002a4: 3c010001 lui at,0x1
+100002a8: 3421e240 ori at,at,0xe240
+100002ac: 00a12821 addu a1,a1,at
+100002b0: 00b12821 addu a1,a1,s1
+100002b4: 8f858018 lw a1,-32744\(gp\)
+100002b8: 8ca50584 lw a1,1412\(a1\)
+100002bc: 8f858018 lw a1,-32744\(gp\)
+100002c0: 8ca50590 lw a1,1424\(a1\)
+100002c4: 8f858018 lw a1,-32744\(gp\)
+100002c8: 00b12821 addu a1,a1,s1
+100002cc: 8ca50584 lw a1,1412\(a1\)
+100002d0: 8f858018 lw a1,-32744\(gp\)
+100002d4: 00b12821 addu a1,a1,s1
+100002d8: 8ca50590 lw a1,1424\(a1\)
+100002dc: 8f818018 lw at,-32744\(gp\)
+100002e0: 00250821 addu at,at,a1
+100002e4: 8c2505a6 lw a1,1446\(at\)
+100002e8: 8f818018 lw at,-32744\(gp\)
+100002ec: 00250821 addu at,at,a1
+100002f0: ac2505bc sw a1,1468\(at\)
+100002f4: 8f818068 lw at,-32664\(gp\)
+100002f8: 88250000 lwl a1,0\(at\)
+100002fc: 98250003 lwr a1,3\(at\)
+10000300: 8f818068 lw at,-32664\(gp\)
+10000304: 2421000c addiu at,at,12
+10000308: 88250000 lwl a1,0\(at\)
+1000030c: 98250003 lwr a1,3\(at\)
+10000310: 8f818068 lw at,-32664\(gp\)
+10000314: 00310821 addu at,at,s1
+10000318: 88250000 lwl a1,0\(at\)
+1000031c: 98250003 lwr a1,3\(at\)
+10000320: 8f818068 lw at,-32664\(gp\)
+10000324: 2421000c addiu at,at,12
+10000328: 00310821 addu at,at,s1
+1000032c: 88250000 lwl a1,0\(at\)
+10000330: 98250003 lwr a1,3\(at\)
+10000334: 8f818068 lw at,-32664\(gp\)
+10000338: 24210022 addiu at,at,34
+1000033c: 00250821 addu at,at,a1
+10000340: 88250000 lwl a1,0\(at\)
+10000344: 98250003 lwr a1,3\(at\)
+10000348: 8f818068 lw at,-32664\(gp\)
+1000034c: 24210038 addiu at,at,56
+10000350: 00250821 addu at,at,a1
+10000354: a8250000 swl a1,0\(at\)
+10000358: b8250003 swr a1,3\(at\)
+1000035c: 8f858034 lw a1,-32716\(gp\)
+10000360: 8f858038 lw a1,-32712\(gp\)
+10000364: 8f85803c lw a1,-32708\(gp\)
+10000368: 8f858034 lw a1,-32716\(gp\)
+1000036c: 00b12821 addu a1,a1,s1
+10000370: 8f858038 lw a1,-32712\(gp\)
+10000374: 00b12821 addu a1,a1,s1
+10000378: 8f85803c lw a1,-32708\(gp\)
+1000037c: 00b12821 addu a1,a1,s1
+10000380: 8f858018 lw a1,-32744\(gp\)
+10000384: 8ca50584 lw a1,1412\(a1\)
+10000388: 8f858018 lw a1,-32744\(gp\)
+1000038c: 8ca50590 lw a1,1424\(a1\)
+10000390: 8f858018 lw a1,-32744\(gp\)
+10000394: 00b12821 addu a1,a1,s1
+10000398: 8ca50584 lw a1,1412\(a1\)
+1000039c: 8f858018 lw a1,-32744\(gp\)
+100003a0: 00b12821 addu a1,a1,s1
+100003a4: 8ca50590 lw a1,1424\(a1\)
+100003a8: 8f818018 lw at,-32744\(gp\)
+100003ac: 00250821 addu at,at,a1
+100003b0: 8c2505a6 lw a1,1446\(at\)
+100003b4: 8f818018 lw at,-32744\(gp\)
+100003b8: 00250821 addu at,at,a1
+100003bc: ac2505bc sw a1,1468\(at\)
+100003c0: 8f818034 lw at,-32716\(gp\)
+100003c4: 88250000 lwl a1,0\(at\)
+100003c8: 98250003 lwr a1,3\(at\)
+100003cc: 8f818038 lw at,-32712\(gp\)
+100003d0: 88250000 lwl a1,0\(at\)
+100003d4: 98250003 lwr a1,3\(at\)
+100003d8: 8f818034 lw at,-32716\(gp\)
+100003dc: 00310821 addu at,at,s1
+100003e0: 88250000 lwl a1,0\(at\)
+100003e4: 98250003 lwr a1,3\(at\)
+100003e8: 8f818038 lw at,-32712\(gp\)
+100003ec: 00310821 addu at,at,s1
+100003f0: 88250000 lwl a1,0\(at\)
+100003f4: 98250003 lwr a1,3\(at\)
+100003f8: 8f818040 lw at,-32704\(gp\)
+100003fc: 00250821 addu at,at,a1
+10000400: 88250000 lwl a1,0\(at\)
+10000404: 98250003 lwr a1,3\(at\)
+10000408: 8f818044 lw at,-32700\(gp\)
+1000040c: 00250821 addu at,at,a1
+10000410: a8250000 swl a1,0\(at\)
+10000414: b8250003 swr a1,3\(at\)
+10000418: 8f858060 lw a1,-32672\(gp\)
+1000041c: 8f858048 lw a1,-32696\(gp\)
+10000420: 8f998060 lw t9,-32672\(gp\)
+10000424: 8f998048 lw t9,-32696\(gp\)
+10000428: 8f998060 lw t9,-32672\(gp\)
+1000042c: 0320f809 jalr t9
+10000430: 00000000 nop
+10000434: 8f998048 lw t9,-32696\(gp\)
+10000438: 0320f809 jalr t9
+1000043c: 00000000 nop
+10000440: 1000ff17 b 100000a0 <fn>
+10000444: 8f858064 lw a1,-32668\(gp\)
+10000448: 8f858018 lw a1,-32744\(gp\)
+1000044c: 10000015 b 100004a4 <fn2>
+10000450: 8ca50584 lw a1,1412\(a1\)
+10000454: 1000ff12 b 100000a0 <fn>
+10000458: 8f85801c lw a1,-32740\(gp\)
+1000045c: 8f858038 lw a1,-32712\(gp\)
+10000460: 10000010 b 100004a4 <fn2>
+10000464: 00000000 nop
+10000468: 8f858024 lw a1,-32732\(gp\)
+1000046c: 1000ff0c b 100000a0 <fn>
+10000470: 00000000 nop
+10000474: 8f858018 lw a1,-32744\(gp\)
+10000478: 1000000a b 100004a4 <fn2>
+1000047c: 8ca50584 lw a1,1412\(a1\)
+10000480: 8f858018 lw a1,-32744\(gp\)
+10000484: 1000ff06 b 100000a0 <fn>
+10000488: 8ca50518 lw a1,1304\(a1\)
+1000048c: 8f818018 lw at,-32744\(gp\)
+10000490: 00250821 addu at,at,a1
+10000494: 10000003 b 100004a4 <fn2>
+10000498: 8c2505a6 lw a1,1446\(at\)
+ \.\.\.
+
+100004a4 <fn2>:
+ \.\.\.
+Disassembly of section \.reginfo:
+
+100004b0 <\.reginfo>:
+100004b0: 92020022 .*
+ \.\.\.
+100004c4: 101085b0 .*
+Disassembly of section \.data:
+
+101004d0 <_fdata>:
+ \.\.\.
+
+1010050c <dg1>:
+ \.\.\.
+
+10100548 <sp2>:
+ \.\.\.
+
+10100584 <dg2>:
+ \.\.\.
+Disassembly of section \.got:
+
+101005c0 <_GLOBAL_OFFSET_TABLE_>:
+101005c0: 00000000 .*
+101005c4: 80000000 .*
+101005c8: 10100000 .*
+101005cc: 1010050c .*
+101005d0: 10100518 .*
+101005d4: 1011e74c .*
+101005d8: 1010052e .*
+101005dc: 10100544 .*
+101005e0: 100000a0 .*
+101005e4: 10100584 .*
+101005e8: 10100590 .*
+101005ec: 1011e7c4 .*
+101005f0: 101005a6 .*
+101005f4: 101005bc .*
+101005f8: 100004a4 .*
+101005fc: 00000000 .*
+ \.\.\.
+1010060c: 100000a0 .*
+10100610: 100004a4 .*
+10100614: 1010050c .*
+10100618: 10100584 .*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d
new file mode 100644
index 00000000..f885d9dc
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n64-linux.d
@@ -0,0 +1,333 @@
+#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: 201085d0 .*
+Disassembly of section \.text:
+
+00000001200000e0 <fn>:
+ 1200000e0: df8580b8 ld a1,-32584\(gp\)
+ 1200000e4: df8580b8 ld a1,-32584\(gp\)
+ 1200000e8: 64a5000c daddiu a1,a1,12
+ 1200000ec: df8580b8 ld a1,-32584\(gp\)
+ 1200000f0: 3c010001 lui at,0x1
+ 1200000f4: 3421e240 ori at,at,0xe240
+ 1200000f8: 00a1282d daddu a1,a1,at
+ 1200000fc: df8580b8 ld a1,-32584\(gp\)
+ 120000100: 00b1282d daddu a1,a1,s1
+ 120000104: df8580b8 ld a1,-32584\(gp\)
+ 120000108: 64a5000c daddiu a1,a1,12
+ 12000010c: 00b1282d daddu a1,a1,s1
+ 120000110: df8580b8 ld a1,-32584\(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: df858020 ld a1,-32736\(gp\)
+ 120000128: dca5052c ld a1,1324\(a1\)
+ 12000012c: df858020 ld a1,-32736\(gp\)
+ 120000130: dca50538 ld a1,1336\(a1\)
+ 120000134: df858020 ld a1,-32736\(gp\)
+ 120000138: 00b1282d daddu a1,a1,s1
+ 12000013c: dca5052c ld a1,1324\(a1\)
+ 120000140: df858020 ld a1,-32736\(gp\)
+ 120000144: 00b1282d daddu a1,a1,s1
+ 120000148: dca50538 ld a1,1336\(a1\)
+ 12000014c: df818020 ld at,-32736\(gp\)
+ 120000150: 0025082d daddu at,at,a1
+ 120000154: dc25054e ld a1,1358\(at\)
+ 120000158: df818020 ld at,-32736\(gp\)
+ 12000015c: 0025082d daddu at,at,a1
+ 120000160: fc250564 sd a1,1380\(at\)
+ 120000164: df8180b8 ld at,-32584\(gp\)
+ 120000168: 88250000 lwl a1,0\(at\)
+ 12000016c: 98250003 lwr a1,3\(at\)
+ 120000170: df8180b8 ld at,-32584\(gp\)
+ 120000174: 6421000c daddiu at,at,12
+ 120000178: 88250000 lwl a1,0\(at\)
+ 12000017c: 98250003 lwr a1,3\(at\)
+ 120000180: df8180b8 ld at,-32584\(gp\)
+ 120000184: 0031082d daddu at,at,s1
+ 120000188: 88250000 lwl a1,0\(at\)
+ 12000018c: 98250003 lwr a1,3\(at\)
+ 120000190: df8180b8 ld at,-32584\(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: df8180b8 ld at,-32584\(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: df8180b8 ld at,-32584\(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: df858028 ld a1,-32728\(gp\)
+ 1200001d0: df858030 ld a1,-32720\(gp\)
+ 1200001d4: df858038 ld a1,-32712\(gp\)
+ 1200001d8: df858028 ld a1,-32728\(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: df858020 ld a1,-32736\(gp\)
+ 1200001f4: dca5052c ld a1,1324\(a1\)
+ 1200001f8: df858020 ld a1,-32736\(gp\)
+ 1200001fc: dca50538 ld a1,1336\(a1\)
+ 120000200: df858020 ld a1,-32736\(gp\)
+ 120000204: 00b1282d daddu a1,a1,s1
+ 120000208: dca5052c ld a1,1324\(a1\)
+ 12000020c: df858020 ld a1,-32736\(gp\)
+ 120000210: 00b1282d daddu a1,a1,s1
+ 120000214: dca50538 ld a1,1336\(a1\)
+ 120000218: df818020 ld at,-32736\(gp\)
+ 12000021c: 0025082d daddu at,at,a1
+ 120000220: dc25054e ld a1,1358\(at\)
+ 120000224: df818020 ld at,-32736\(gp\)
+ 120000228: 0025082d daddu at,at,a1
+ 12000022c: fc250564 sd a1,1380\(at\)
+ 120000230: df818028 ld at,-32728\(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: df818028 ld at,-32728\(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: df8580a8 ld a1,-32600\(gp\)
+ 12000028c: df858050 ld a1,-32688\(gp\)
+ 120000290: df9980a8 ld t9,-32600\(gp\)
+ 120000294: df998050 ld t9,-32688\(gp\)
+ 120000298: df9980a8 ld t9,-32600\(gp\)
+ 12000029c: 0320f809 jalr t9
+ 1200002a0: 00000000 nop
+ 1200002a4: df998050 ld t9,-32688\(gp\)
+ 1200002a8: 0320f809 jalr t9
+ 1200002ac: 00000000 nop
+ 1200002b0: df8580c0 ld a1,-32576\(gp\)
+ 1200002b4: df8580c0 ld a1,-32576\(gp\)
+ 1200002b8: 64a5000c daddiu a1,a1,12
+ 1200002bc: df8580c0 ld a1,-32576\(gp\)
+ 1200002c0: 3c010001 lui at,0x1
+ 1200002c4: 3421e240 ori at,at,0xe240
+ 1200002c8: 00a1282d daddu a1,a1,at
+ 1200002cc: df8580c0 ld a1,-32576\(gp\)
+ 1200002d0: 00b1282d daddu a1,a1,s1
+ 1200002d4: df8580c0 ld a1,-32576\(gp\)
+ 1200002d8: 64a5000c daddiu a1,a1,12
+ 1200002dc: 00b1282d daddu a1,a1,s1
+ 1200002e0: df8580c0 ld a1,-32576\(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: df858020 ld a1,-32736\(gp\)
+ 1200002f8: dca505a4 ld a1,1444\(a1\)
+ 1200002fc: df858020 ld a1,-32736\(gp\)
+ 120000300: dca505b0 ld a1,1456\(a1\)
+ 120000304: df858020 ld a1,-32736\(gp\)
+ 120000308: 00b1282d daddu a1,a1,s1
+ 12000030c: dca505a4 ld a1,1444\(a1\)
+ 120000310: df858020 ld a1,-32736\(gp\)
+ 120000314: 00b1282d daddu a1,a1,s1
+ 120000318: dca505b0 ld a1,1456\(a1\)
+ 12000031c: df818020 ld at,-32736\(gp\)
+ 120000320: 0025082d daddu at,at,a1
+ 120000324: dc2505c6 ld a1,1478\(at\)
+ 120000328: df818020 ld at,-32736\(gp\)
+ 12000032c: 0025082d daddu at,at,a1
+ 120000330: fc2505dc sd a1,1500\(at\)
+ 120000334: df8180c0 ld at,-32576\(gp\)
+ 120000338: 88250000 lwl a1,0\(at\)
+ 12000033c: 98250003 lwr a1,3\(at\)
+ 120000340: df8180c0 ld at,-32576\(gp\)
+ 120000344: 6421000c daddiu at,at,12
+ 120000348: 88250000 lwl a1,0\(at\)
+ 12000034c: 98250003 lwr a1,3\(at\)
+ 120000350: df8180c0 ld at,-32576\(gp\)
+ 120000354: 0031082d daddu at,at,s1
+ 120000358: 88250000 lwl a1,0\(at\)
+ 12000035c: 98250003 lwr a1,3\(at\)
+ 120000360: df8180c0 ld at,-32576\(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: df8180c0 ld at,-32576\(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: df8180c0 ld at,-32576\(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: df858020 ld a1,-32736\(gp\)
+ 1200003c4: dca505a4 ld a1,1444\(a1\)
+ 1200003c8: df858020 ld a1,-32736\(gp\)
+ 1200003cc: dca505b0 ld a1,1456\(a1\)
+ 1200003d0: df858020 ld a1,-32736\(gp\)
+ 1200003d4: 00b1282d daddu a1,a1,s1
+ 1200003d8: dca505a4 ld a1,1444\(a1\)
+ 1200003dc: df858020 ld a1,-32736\(gp\)
+ 1200003e0: 00b1282d daddu a1,a1,s1
+ 1200003e4: dca505b0 ld a1,1456\(a1\)
+ 1200003e8: df818020 ld at,-32736\(gp\)
+ 1200003ec: 0025082d daddu at,at,a1
+ 1200003f0: dc2505c6 ld a1,1478\(at\)
+ 1200003f4: df818020 ld at,-32736\(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: df8580b0 ld a1,-32592\(gp\)
+ 12000045c: df858080 ld a1,-32640\(gp\)
+ 120000460: df9980b0 ld t9,-32592\(gp\)
+ 120000464: df998080 ld t9,-32640\(gp\)
+ 120000468: df9980b0 ld t9,-32592\(gp\)
+ 12000046c: 0320f809 jalr t9
+ 120000470: 00000000 nop
+ 120000474: df998080 ld t9,-32640\(gp\)
+ 120000478: 0320f809 jalr t9
+ 12000047c: 00000000 nop
+ 120000480: 1000ff17 b 1200000e0 <fn>
+ 120000484: df8580b8 ld a1,-32584\(gp\)
+ 120000488: df858020 ld a1,-32736\(gp\)
+ 12000048c: 10000015 b 1200004e4 <fn2>
+ 120000490: dca505a4 ld a1,1444\(a1\)
+ 120000494: 1000ff12 b 1200000e0 <fn>
+ 120000498: df858028 ld a1,-32728\(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: df858020 ld a1,-32736\(gp\)
+ 1200004b8: 1000000a b 1200004e4 <fn2>
+ 1200004bc: dca505a4 ld a1,1444\(a1\)
+ 1200004c0: df858020 ld a1,-32736\(gp\)
+ 1200004c4: 1000ff06 b 1200000e0 <fn>
+ 1200004c8: dca50538 ld a1,1336\(a1\)
+ 1200004cc: df818020 ld at,-32736\(gp\)
+ 1200004d0: 0025082d daddu at,at,a1
+ 1200004d4: 10000003 b 1200004e4 <fn2>
+ 1200004d8: dc2505c6 ld a1,1478\(at\)
+ \.\.\.
+
+00000001200004e4 <fn2>:
+ \.\.\.
+Disassembly of section \.data:
+
+00000001201004f0 <_fdata>:
+ \.\.\.
+
+000000012010052c <dg1>:
+ \.\.\.
+
+0000000120100568 <sp2>:
+ \.\.\.
+
+00000001201005a4 <dg2>:
+ \.\.\.
+Disassembly of section \.got:
+
+00000001201005e0 <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+ 1201005ec: 80000000 .*
+ 1201005f0: 00000001 .*
+ 1201005f4: 20100000 .*
+ 1201005f8: 00000001 .*
+ 1201005fc: 2010052c .*
+ 120100600: 00000001 .*
+ 120100604: 20100538 .*
+ 120100608: 00000001 .*
+ 12010060c: 2011e76c .*
+ 120100610: 00000001 .*
+ 120100614: 2010054e .*
+ 120100618: 00000001 .*
+ 12010061c: 20100564 .*
+ 120100620: 00000001 .*
+ 120100624: 200000e0 .*
+ 120100628: 00000001 .*
+ 12010062c: 201005a4 .*
+ 120100630: 00000001 .*
+ 120100634: 201005b0 .*
+ 120100638: 00000001 .*
+ 12010063c: 2011e7e4 .*
+ 120100640: 00000001 .*
+ 120100644: 201005c6 .*
+ 120100648: 00000001 .*
+ 12010064c: 201005dc .*
+ 120100650: 00000001 .*
+ 120100654: 200004e4 .*
+ \.\.\.
+ 120100678: 00000001 .*
+ 12010067c: 200000e0 .*
+ 120100680: 00000001 .*
+ 120100684: 200004e4 .*
+ 120100688: 00000001 .*
+ 12010068c: 2010052c .*
+ 120100690: 00000001 .*
+ 120100694: 201005a4 .*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d
new file mode 100644
index 00000000..3047911c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-got-n64.d
@@ -0,0 +1,331 @@
+#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_>:
+ \.\.\.
+ 101005ec: 80000000 .*
+ 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.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d
new file mode 100644
index 00000000..0f992f59
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d
@@ -0,0 +1,428 @@
+#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 \.text:
+
+100000a0 <fn>:
+100000a0: 3c050000 lui a1,0x0
+100000a4: 00bc2821 addu a1,a1,gp
+100000a8: 8ca58034 lw a1,-32716\(a1\)
+100000ac: 3c050000 lui a1,0x0
+100000b0: 00bc2821 addu a1,a1,gp
+100000b4: 8ca58034 lw a1,-32716\(a1\)
+100000b8: 24a5000c addiu a1,a1,12
+100000bc: 3c050000 lui a1,0x0
+100000c0: 00bc2821 addu a1,a1,gp
+100000c4: 8ca58034 lw a1,-32716\(a1\)
+100000c8: 3c010001 lui at,0x1
+100000cc: 3421e240 ori at,at,0xe240
+100000d0: 00a12821 addu a1,a1,at
+100000d4: 3c050000 lui a1,0x0
+100000d8: 00bc2821 addu a1,a1,gp
+100000dc: 8ca58034 lw a1,-32716\(a1\)
+100000e0: 00b12821 addu a1,a1,s1
+100000e4: 3c050000 lui a1,0x0
+100000e8: 00bc2821 addu a1,a1,gp
+100000ec: 8ca58034 lw a1,-32716\(a1\)
+100000f0: 24a5000c addiu a1,a1,12
+100000f4: 00b12821 addu a1,a1,s1
+100000f8: 3c050000 lui a1,0x0
+100000fc: 00bc2821 addu a1,a1,gp
+10000100: 8ca58034 lw a1,-32716\(a1\)
+10000104: 3c010001 lui at,0x1
+10000108: 3421e240 ori at,at,0xe240
+1000010c: 00a12821 addu a1,a1,at
+10000110: 00b12821 addu a1,a1,s1
+10000114: 3c050000 lui a1,0x0
+10000118: 00bc2821 addu a1,a1,gp
+1000011c: 8ca58034 lw a1,-32716\(a1\)
+10000120: 8ca50000 lw a1,0\(a1\)
+10000124: 3c050000 lui a1,0x0
+10000128: 00bc2821 addu a1,a1,gp
+1000012c: 8ca58034 lw a1,-32716\(a1\)
+10000130: 8ca5000c lw a1,12\(a1\)
+10000134: 3c050000 lui a1,0x0
+10000138: 00bc2821 addu a1,a1,gp
+1000013c: 8ca58034 lw a1,-32716\(a1\)
+10000140: 00b12821 addu a1,a1,s1
+10000144: 8ca50000 lw a1,0\(a1\)
+10000148: 3c050000 lui a1,0x0
+1000014c: 00bc2821 addu a1,a1,gp
+10000150: 8ca58034 lw a1,-32716\(a1\)
+10000154: 00b12821 addu a1,a1,s1
+10000158: 8ca5000c lw a1,12\(a1\)
+1000015c: 3c010000 lui at,0x0
+10000160: 003c0821 addu at,at,gp
+10000164: 8c218034 lw at,-32716\(at\)
+10000168: 00250821 addu at,at,a1
+1000016c: 8c250022 lw a1,34\(at\)
+10000170: 3c010000 lui at,0x0
+10000174: 003c0821 addu at,at,gp
+10000178: 8c218034 lw at,-32716\(at\)
+1000017c: 00250821 addu at,at,a1
+10000180: ac250038 sw a1,56\(at\)
+10000184: 3c010000 lui at,0x0
+10000188: 003c0821 addu at,at,gp
+1000018c: 8c218034 lw at,-32716\(at\)
+10000190: 88250000 lwl a1,0\(at\)
+10000194: 98250003 lwr a1,3\(at\)
+10000198: 3c010000 lui at,0x0
+1000019c: 003c0821 addu at,at,gp
+100001a0: 8c218034 lw at,-32716\(at\)
+100001a4: 2421000c addiu at,at,12
+100001a8: 88250000 lwl a1,0\(at\)
+100001ac: 98250003 lwr a1,3\(at\)
+100001b0: 3c010000 lui at,0x0
+100001b4: 003c0821 addu at,at,gp
+100001b8: 8c218034 lw at,-32716\(at\)
+100001bc: 00310821 addu at,at,s1
+100001c0: 88250000 lwl a1,0\(at\)
+100001c4: 98250003 lwr a1,3\(at\)
+100001c8: 3c010000 lui at,0x0
+100001cc: 003c0821 addu at,at,gp
+100001d0: 8c218034 lw at,-32716\(at\)
+100001d4: 2421000c addiu at,at,12
+100001d8: 00310821 addu at,at,s1
+100001dc: 88250000 lwl a1,0\(at\)
+100001e0: 98250003 lwr a1,3\(at\)
+100001e4: 3c010000 lui at,0x0
+100001e8: 003c0821 addu at,at,gp
+100001ec: 8c218034 lw at,-32716\(at\)
+100001f0: 24210022 addiu at,at,34
+100001f4: 00250821 addu at,at,a1
+100001f8: 88250000 lwl a1,0\(at\)
+100001fc: 98250003 lwr a1,3\(at\)
+10000200: 3c010000 lui at,0x0
+10000204: 003c0821 addu at,at,gp
+10000208: 8c218034 lw at,-32716\(at\)
+1000020c: 24210038 addiu at,at,56
+10000210: 00250821 addu at,at,a1
+10000214: a8250000 swl a1,0\(at\)
+10000218: b8250003 swr a1,3\(at\)
+1000021c: 8f858018 lw a1,-32744\(gp\)
+10000220: 24a506fc addiu a1,a1,1788
+10000224: 8f858018 lw a1,-32744\(gp\)
+10000228: 24a50708 addiu a1,a1,1800
+1000022c: 8f85801c lw a1,-32740\(gp\)
+10000230: 24a5e93c addiu a1,a1,-5828
+10000234: 8f858018 lw a1,-32744\(gp\)
+10000238: 24a506fc addiu a1,a1,1788
+1000023c: 00b12821 addu a1,a1,s1
+10000240: 8f858018 lw a1,-32744\(gp\)
+10000244: 24a50708 addiu a1,a1,1800
+10000248: 00b12821 addu a1,a1,s1
+1000024c: 8f85801c lw a1,-32740\(gp\)
+10000250: 24a5e93c addiu a1,a1,-5828
+10000254: 00b12821 addu a1,a1,s1
+10000258: 8f858018 lw a1,-32744\(gp\)
+1000025c: 8ca506fc lw a1,1788\(a1\)
+10000260: 8f858018 lw a1,-32744\(gp\)
+10000264: 8ca50708 lw a1,1800\(a1\)
+10000268: 8f858018 lw a1,-32744\(gp\)
+1000026c: 00b12821 addu a1,a1,s1
+10000270: 8ca506fc lw a1,1788\(a1\)
+10000274: 8f858018 lw a1,-32744\(gp\)
+10000278: 00b12821 addu a1,a1,s1
+1000027c: 8ca50708 lw a1,1800\(a1\)
+10000280: 8f818018 lw at,-32744\(gp\)
+10000284: 00250821 addu at,at,a1
+10000288: 8c25071e lw a1,1822\(at\)
+1000028c: 8f818018 lw at,-32744\(gp\)
+10000290: 00250821 addu at,at,a1
+10000294: ac250734 sw a1,1844\(at\)
+10000298: 8f818018 lw at,-32744\(gp\)
+1000029c: 242106fc addiu at,at,1788
+100002a0: 88250000 lwl a1,0\(at\)
+100002a4: 98250003 lwr a1,3\(at\)
+100002a8: 8f818018 lw at,-32744\(gp\)
+100002ac: 24210708 addiu at,at,1800
+100002b0: 88250000 lwl a1,0\(at\)
+100002b4: 98250003 lwr a1,3\(at\)
+100002b8: 8f818018 lw at,-32744\(gp\)
+100002bc: 242106fc addiu at,at,1788
+100002c0: 00310821 addu at,at,s1
+100002c4: 88250000 lwl a1,0\(at\)
+100002c8: 98250003 lwr a1,3\(at\)
+100002cc: 8f818018 lw at,-32744\(gp\)
+100002d0: 24210708 addiu at,at,1800
+100002d4: 00310821 addu at,at,s1
+100002d8: 88250000 lwl a1,0\(at\)
+100002dc: 98250003 lwr a1,3\(at\)
+100002e0: 8f818018 lw at,-32744\(gp\)
+100002e4: 2421071e addiu at,at,1822
+100002e8: 00250821 addu at,at,a1
+100002ec: 88250000 lwl a1,0\(at\)
+100002f0: 98250003 lwr a1,3\(at\)
+100002f4: 8f818018 lw at,-32744\(gp\)
+100002f8: 24210734 addiu at,at,1844
+100002fc: 00250821 addu at,at,a1
+10000300: a8250000 swl a1,0\(at\)
+10000304: b8250003 swr a1,3\(at\)
+10000308: 3c050000 lui a1,0x0
+1000030c: 00bc2821 addu a1,a1,gp
+10000310: 8ca5802c lw a1,-32724\(a1\)
+10000314: 8f858020 lw a1,-32736\(gp\)
+10000318: 24a500a0 addiu a1,a1,160
+1000031c: 3c190000 lui t9,0x0
+10000320: 033cc821 addu t9,t9,gp
+10000324: 8f39802c lw t9,-32724\(t9\)
+10000328: 8f998020 lw t9,-32736\(gp\)
+1000032c: 273900a0 addiu t9,t9,160
+10000330: 3c190000 lui t9,0x0
+10000334: 033cc821 addu t9,t9,gp
+10000338: 8f39802c lw t9,-32724\(t9\)
+1000033c: 0320f809 jalr t9
+10000340: 00000000 nop
+10000344: 8f998020 lw t9,-32736\(gp\)
+10000348: 273900a0 addiu t9,t9,160
+1000034c: 0320f809 jalr t9
+10000350: 00000000 nop
+10000354: 3c050000 lui a1,0x0
+10000358: 00bc2821 addu a1,a1,gp
+1000035c: 8ca58038 lw a1,-32712\(a1\)
+10000360: 3c050000 lui a1,0x0
+10000364: 00bc2821 addu a1,a1,gp
+10000368: 8ca58038 lw a1,-32712\(a1\)
+1000036c: 24a5000c addiu a1,a1,12
+10000370: 3c050000 lui a1,0x0
+10000374: 00bc2821 addu a1,a1,gp
+10000378: 8ca58038 lw a1,-32712\(a1\)
+1000037c: 3c010001 lui at,0x1
+10000380: 3421e240 ori at,at,0xe240
+10000384: 00a12821 addu a1,a1,at
+10000388: 3c050000 lui a1,0x0
+1000038c: 00bc2821 addu a1,a1,gp
+10000390: 8ca58038 lw a1,-32712\(a1\)
+10000394: 00b12821 addu a1,a1,s1
+10000398: 3c050000 lui a1,0x0
+1000039c: 00bc2821 addu a1,a1,gp
+100003a0: 8ca58038 lw a1,-32712\(a1\)
+100003a4: 24a5000c addiu a1,a1,12
+100003a8: 00b12821 addu a1,a1,s1
+100003ac: 3c050000 lui a1,0x0
+100003b0: 00bc2821 addu a1,a1,gp
+100003b4: 8ca58038 lw a1,-32712\(a1\)
+100003b8: 3c010001 lui at,0x1
+100003bc: 3421e240 ori at,at,0xe240
+100003c0: 00a12821 addu a1,a1,at
+100003c4: 00b12821 addu a1,a1,s1
+100003c8: 3c050000 lui a1,0x0
+100003cc: 00bc2821 addu a1,a1,gp
+100003d0: 8ca58038 lw a1,-32712\(a1\)
+100003d4: 8ca50000 lw a1,0\(a1\)
+100003d8: 3c050000 lui a1,0x0
+100003dc: 00bc2821 addu a1,a1,gp
+100003e0: 8ca58038 lw a1,-32712\(a1\)
+100003e4: 8ca5000c lw a1,12\(a1\)
+100003e8: 3c050000 lui a1,0x0
+100003ec: 00bc2821 addu a1,a1,gp
+100003f0: 8ca58038 lw a1,-32712\(a1\)
+100003f4: 00b12821 addu a1,a1,s1
+100003f8: 8ca50000 lw a1,0\(a1\)
+100003fc: 3c050000 lui a1,0x0
+10000400: 00bc2821 addu a1,a1,gp
+10000404: 8ca58038 lw a1,-32712\(a1\)
+10000408: 00b12821 addu a1,a1,s1
+1000040c: 8ca5000c lw a1,12\(a1\)
+10000410: 3c010000 lui at,0x0
+10000414: 003c0821 addu at,at,gp
+10000418: 8c218038 lw at,-32712\(at\)
+1000041c: 00250821 addu at,at,a1
+10000420: 8c250022 lw a1,34\(at\)
+10000424: 3c010000 lui at,0x0
+10000428: 003c0821 addu at,at,gp
+1000042c: 8c218038 lw at,-32712\(at\)
+10000430: 00250821 addu at,at,a1
+10000434: ac250038 sw a1,56\(at\)
+10000438: 3c010000 lui at,0x0
+1000043c: 003c0821 addu at,at,gp
+10000440: 8c218038 lw at,-32712\(at\)
+10000444: 88250000 lwl a1,0\(at\)
+10000448: 98250003 lwr a1,3\(at\)
+1000044c: 3c010000 lui at,0x0
+10000450: 003c0821 addu at,at,gp
+10000454: 8c218038 lw at,-32712\(at\)
+10000458: 2421000c addiu at,at,12
+1000045c: 88250000 lwl a1,0\(at\)
+10000460: 98250003 lwr a1,3\(at\)
+10000464: 3c010000 lui at,0x0
+10000468: 003c0821 addu at,at,gp
+1000046c: 8c218038 lw at,-32712\(at\)
+10000470: 00310821 addu at,at,s1
+10000474: 88250000 lwl a1,0\(at\)
+10000478: 98250003 lwr a1,3\(at\)
+1000047c: 3c010000 lui at,0x0
+10000480: 003c0821 addu at,at,gp
+10000484: 8c218038 lw at,-32712\(at\)
+10000488: 2421000c addiu at,at,12
+1000048c: 00310821 addu at,at,s1
+10000490: 88250000 lwl a1,0\(at\)
+10000494: 98250003 lwr a1,3\(at\)
+10000498: 3c010000 lui at,0x0
+1000049c: 003c0821 addu at,at,gp
+100004a0: 8c218038 lw at,-32712\(at\)
+100004a4: 24210022 addiu at,at,34
+100004a8: 00250821 addu at,at,a1
+100004ac: 88250000 lwl a1,0\(at\)
+100004b0: 98250003 lwr a1,3\(at\)
+100004b4: 3c010000 lui at,0x0
+100004b8: 003c0821 addu at,at,gp
+100004bc: 8c218038 lw at,-32712\(at\)
+100004c0: 24210038 addiu at,at,56
+100004c4: 00250821 addu at,at,a1
+100004c8: a8250000 swl a1,0\(at\)
+100004cc: b8250003 swr a1,3\(at\)
+100004d0: 8f858018 lw a1,-32744\(gp\)
+100004d4: 24a50774 addiu a1,a1,1908
+100004d8: 8f858018 lw a1,-32744\(gp\)
+100004dc: 24a50780 addiu a1,a1,1920
+100004e0: 8f85801c lw a1,-32740\(gp\)
+100004e4: 24a5e9b4 addiu a1,a1,-5708
+100004e8: 8f858018 lw a1,-32744\(gp\)
+100004ec: 24a50774 addiu a1,a1,1908
+100004f0: 00b12821 addu a1,a1,s1
+100004f4: 8f858018 lw a1,-32744\(gp\)
+100004f8: 24a50780 addiu a1,a1,1920
+100004fc: 00b12821 addu a1,a1,s1
+10000500: 8f85801c lw a1,-32740\(gp\)
+10000504: 24a5e9b4 addiu a1,a1,-5708
+10000508: 00b12821 addu a1,a1,s1
+1000050c: 8f858018 lw a1,-32744\(gp\)
+10000510: 8ca50774 lw a1,1908\(a1\)
+10000514: 8f858018 lw a1,-32744\(gp\)
+10000518: 8ca50780 lw a1,1920\(a1\)
+1000051c: 8f858018 lw a1,-32744\(gp\)
+10000520: 00b12821 addu a1,a1,s1
+10000524: 8ca50774 lw a1,1908\(a1\)
+10000528: 8f858018 lw a1,-32744\(gp\)
+1000052c: 00b12821 addu a1,a1,s1
+10000530: 8ca50780 lw a1,1920\(a1\)
+10000534: 8f818018 lw at,-32744\(gp\)
+10000538: 00250821 addu at,at,a1
+1000053c: 8c250796 lw a1,1942\(at\)
+10000540: 8f818018 lw at,-32744\(gp\)
+10000544: 00250821 addu at,at,a1
+10000548: ac2507ac sw a1,1964\(at\)
+1000054c: 8f818018 lw at,-32744\(gp\)
+10000550: 24210774 addiu at,at,1908
+10000554: 88250000 lwl a1,0\(at\)
+10000558: 98250003 lwr a1,3\(at\)
+1000055c: 8f818018 lw at,-32744\(gp\)
+10000560: 24210780 addiu at,at,1920
+10000564: 88250000 lwl a1,0\(at\)
+10000568: 98250003 lwr a1,3\(at\)
+1000056c: 8f818018 lw at,-32744\(gp\)
+10000570: 24210774 addiu at,at,1908
+10000574: 00310821 addu at,at,s1
+10000578: 88250000 lwl a1,0\(at\)
+1000057c: 98250003 lwr a1,3\(at\)
+10000580: 8f818018 lw at,-32744\(gp\)
+10000584: 24210780 addiu at,at,1920
+10000588: 00310821 addu at,at,s1
+1000058c: 88250000 lwl a1,0\(at\)
+10000590: 98250003 lwr a1,3\(at\)
+10000594: 8f818018 lw at,-32744\(gp\)
+10000598: 24210796 addiu at,at,1942
+1000059c: 00250821 addu at,at,a1
+100005a0: 88250000 lwl a1,0\(at\)
+100005a4: 98250003 lwr a1,3\(at\)
+100005a8: 8f818018 lw at,-32744\(gp\)
+100005ac: 242107ac addiu at,at,1964
+100005b0: 00250821 addu at,at,a1
+100005b4: a8250000 swl a1,0\(at\)
+100005b8: b8250003 swr a1,3\(at\)
+100005bc: 3c050000 lui a1,0x0
+100005c0: 00bc2821 addu a1,a1,gp
+100005c4: 8ca58030 lw a1,-32720\(a1\)
+100005c8: 8f858020 lw a1,-32736\(gp\)
+100005cc: 24a506a0 addiu a1,a1,1696
+100005d0: 3c190000 lui t9,0x0
+100005d4: 033cc821 addu t9,t9,gp
+100005d8: 8f398030 lw t9,-32720\(t9\)
+100005dc: 8f998020 lw t9,-32736\(gp\)
+100005e0: 273906a0 addiu t9,t9,1696
+100005e4: 3c190000 lui t9,0x0
+100005e8: 033cc821 addu t9,t9,gp
+100005ec: 8f398030 lw t9,-32720\(t9\)
+100005f0: 0320f809 jalr t9
+100005f4: 00000000 nop
+100005f8: 8f998020 lw t9,-32736\(gp\)
+100005fc: 273906a0 addiu t9,t9,1696
+10000600: 0320f809 jalr t9
+10000604: 00000000 nop
+10000608: 3c050000 lui a1,0x0
+1000060c: 00bc2821 addu a1,a1,gp
+10000610: 8ca58034 lw a1,-32716\(a1\)
+10000614: 1000fea2 b 100000a0 <fn>
+10000618: 00000000 nop
+1000061c: 3c050000 lui a1,0x0
+10000620: 00bc2821 addu a1,a1,gp
+10000624: 8ca58038 lw a1,-32712\(a1\)
+10000628: 8ca50000 lw a1,0\(a1\)
+1000062c: 1000001c b 100006a0 <fn2>
+10000630: 00000000 nop
+10000634: 8f858018 lw a1,-32744\(gp\)
+10000638: 24a506fc addiu a1,a1,1788
+1000063c: 1000fe98 b 100000a0 <fn>
+10000640: 00000000 nop
+10000644: 8f858018 lw a1,-32744\(gp\)
+10000648: 24a50780 addiu a1,a1,1920
+1000064c: 10000014 b 100006a0 <fn2>
+10000650: 00000000 nop
+10000654: 8f85801c lw a1,-32740\(gp\)
+10000658: 24a5e93c addiu a1,a1,-5828
+1000065c: 1000fe90 b 100000a0 <fn>
+10000660: 00000000 nop
+10000664: 8f858018 lw a1,-32744\(gp\)
+10000668: 8ca50774 lw a1,1908\(a1\)
+1000066c: 1000000c b 100006a0 <fn2>
+10000670: 00000000 nop
+10000674: 8f858018 lw a1,-32744\(gp\)
+10000678: 8ca50708 lw a1,1800\(a1\)
+1000067c: 1000fe88 b 100000a0 <fn>
+10000680: 00000000 nop
+10000684: 8f818018 lw at,-32744\(gp\)
+10000688: 00250821 addu at,at,a1
+1000068c: 8c250796 lw a1,1942\(at\)
+10000690: 10000003 b 100006a0 <fn2>
+10000694: 00000000 nop
+ \.\.\.
+Disassembly of section \.reginfo:
+
+100006a0 <\.reginfo>:
+100006a0: 92020022 .*
+ \.\.\.
+100006b4: 101087a0 .*
+Disassembly of section \.data:
+
+101006c0 <_fdata>:
+ \.\.\.
+
+101006fc <dg1>:
+ \.\.\.
+
+10100738 <sp2>:
+ \.\.\.
+
+10100774 <dg2>:
+ \.\.\.
+Disassembly of section \.got:
+
+101007b0 <_GLOBAL_OFFSET_TABLE_>:
+101007b0: 00000000 .*
+101007b4: 80000000 .*
+101007b8: 10100000 .*
+101007bc: 10120000 .*
+101007c0: 10000000 .*
+101007c4: 00000000 .*
+101007c8: 00000000 .*
+101007cc: 100000a0 .*
+101007d0: 100006a0 .*
+101007d4: 101006fc .*
+101007d8: 10100774 .*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d
new file mode 100644
index 00000000..60a89a83
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.d
@@ -0,0 +1,437 @@
+#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: 201087c0 .*
+Disassembly of section \.text:
+
+00000001200000e0 <fn>:
+ 1200000e0: 3c050000 lui a1,0x0
+ 1200000e4: 00bc282d daddu a1,a1,gp
+ 1200000e8: dca58058 ld a1,-32680\(a1\)
+ 1200000ec: 3c050000 lui a1,0x0
+ 1200000f0: 00bc282d daddu a1,a1,gp
+ 1200000f4: dca58058 ld a1,-32680\(a1\)
+ 1200000f8: 64a5000c daddiu a1,a1,12
+ 1200000fc: 3c050000 lui a1,0x0
+ 120000100: 00bc282d daddu a1,a1,gp
+ 120000104: dca58058 ld a1,-32680\(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: dca58058 ld a1,-32680\(a1\)
+ 120000120: 00b1282d daddu a1,a1,s1
+ 120000124: 3c050000 lui a1,0x0
+ 120000128: 00bc282d daddu a1,a1,gp
+ 12000012c: dca58058 ld a1,-32680\(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: dca58058 ld a1,-32680\(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: dca58058 ld a1,-32680\(a1\)
+ 120000160: dca50000 ld a1,0\(a1\)
+ 120000164: 3c050000 lui a1,0x0
+ 120000168: 00bc282d daddu a1,a1,gp
+ 12000016c: dca58058 ld a1,-32680\(a1\)
+ 120000170: dca5000c ld a1,12\(a1\)
+ 120000174: 3c050000 lui a1,0x0
+ 120000178: 00bc282d daddu a1,a1,gp
+ 12000017c: dca58058 ld a1,-32680\(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: dca58058 ld a1,-32680\(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: dc218058 ld at,-32680\(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: dc218058 ld at,-32680\(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: dc218058 ld at,-32680\(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: dc218058 ld at,-32680\(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: dc218058 ld at,-32680\(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: dc218058 ld at,-32680\(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: dc218058 ld at,-32680\(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: dc218058 ld at,-32680\(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: df858020 ld a1,-32736\(gp\)
+ 120000260: 64a5071c daddiu a1,a1,1820
+ 120000264: df858020 ld a1,-32736\(gp\)
+ 120000268: 64a50728 daddiu a1,a1,1832
+ 12000026c: df858028 ld a1,-32728\(gp\)
+ 120000270: 64a5e95c daddiu a1,a1,-5796
+ 120000274: df858020 ld a1,-32736\(gp\)
+ 120000278: 64a5071c daddiu a1,a1,1820
+ 12000027c: 00b1282d daddu a1,a1,s1
+ 120000280: df858020 ld a1,-32736\(gp\)
+ 120000284: 64a50728 daddiu a1,a1,1832
+ 120000288: 00b1282d daddu a1,a1,s1
+ 12000028c: df858028 ld a1,-32728\(gp\)
+ 120000290: 64a5e95c daddiu a1,a1,-5796
+ 120000294: 00b1282d daddu a1,a1,s1
+ 120000298: df858020 ld a1,-32736\(gp\)
+ 12000029c: dca5071c ld a1,1820\(a1\)
+ 1200002a0: df858020 ld a1,-32736\(gp\)
+ 1200002a4: dca50728 ld a1,1832\(a1\)
+ 1200002a8: df858020 ld a1,-32736\(gp\)
+ 1200002ac: 00b1282d daddu a1,a1,s1
+ 1200002b0: dca5071c ld a1,1820\(a1\)
+ 1200002b4: df858020 ld a1,-32736\(gp\)
+ 1200002b8: 00b1282d daddu a1,a1,s1
+ 1200002bc: dca50728 ld a1,1832\(a1\)
+ 1200002c0: df818020 ld at,-32736\(gp\)
+ 1200002c4: 0025082d daddu at,at,a1
+ 1200002c8: dc25073e ld a1,1854\(at\)
+ 1200002cc: df818020 ld at,-32736\(gp\)
+ 1200002d0: 0025082d daddu at,at,a1
+ 1200002d4: fc250754 sd a1,1876\(at\)
+ 1200002d8: df818020 ld at,-32736\(gp\)
+ 1200002dc: 6421071c daddiu at,at,1820
+ 1200002e0: 88250000 lwl a1,0\(at\)
+ 1200002e4: 98250003 lwr a1,3\(at\)
+ 1200002e8: df818020 ld at,-32736\(gp\)
+ 1200002ec: 64210728 daddiu at,at,1832
+ 1200002f0: 88250000 lwl a1,0\(at\)
+ 1200002f4: 98250003 lwr a1,3\(at\)
+ 1200002f8: df818020 ld at,-32736\(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: df818020 ld at,-32736\(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: df818020 ld at,-32736\(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: df818020 ld at,-32736\(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: dca58048 ld a1,-32696\(a1\)
+ 120000354: df858030 ld a1,-32720\(gp\)
+ 120000358: 64a500e0 daddiu a1,a1,224
+ 12000035c: 3c190000 lui t9,0x0
+ 120000360: 033cc82d daddu t9,t9,gp
+ 120000364: df398048 ld t9,-32696\(t9\)
+ 120000368: df998030 ld t9,-32720\(gp\)
+ 12000036c: 673900e0 daddiu t9,t9,224
+ 120000370: 3c190000 lui t9,0x0
+ 120000374: 033cc82d daddu t9,t9,gp
+ 120000378: df398048 ld t9,-32696\(t9\)
+ 12000037c: 0320f809 jalr t9
+ 120000380: 00000000 nop
+ 120000384: df998030 ld t9,-32720\(gp\)
+ 120000388: 673900e0 daddiu t9,t9,224
+ 12000038c: 0320f809 jalr t9
+ 120000390: 00000000 nop
+ 120000394: 3c050000 lui a1,0x0
+ 120000398: 00bc282d daddu a1,a1,gp
+ 12000039c: dca58060 ld a1,-32672\(a1\)
+ 1200003a0: 3c050000 lui a1,0x0
+ 1200003a4: 00bc282d daddu a1,a1,gp
+ 1200003a8: dca58060 ld a1,-32672\(a1\)
+ 1200003ac: 64a5000c daddiu a1,a1,12
+ 1200003b0: 3c050000 lui a1,0x0
+ 1200003b4: 00bc282d daddu a1,a1,gp
+ 1200003b8: dca58060 ld a1,-32672\(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: dca58060 ld a1,-32672\(a1\)
+ 1200003d4: 00b1282d daddu a1,a1,s1
+ 1200003d8: 3c050000 lui a1,0x0
+ 1200003dc: 00bc282d daddu a1,a1,gp
+ 1200003e0: dca58060 ld a1,-32672\(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: dca58060 ld a1,-32672\(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: dca58060 ld a1,-32672\(a1\)
+ 120000414: dca50000 ld a1,0\(a1\)
+ 120000418: 3c050000 lui a1,0x0
+ 12000041c: 00bc282d daddu a1,a1,gp
+ 120000420: dca58060 ld a1,-32672\(a1\)
+ 120000424: dca5000c ld a1,12\(a1\)
+ 120000428: 3c050000 lui a1,0x0
+ 12000042c: 00bc282d daddu a1,a1,gp
+ 120000430: dca58060 ld a1,-32672\(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: dca58060 ld a1,-32672\(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: dc218060 ld at,-32672\(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: dc218060 ld at,-32672\(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: dc218060 ld at,-32672\(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: dc218060 ld at,-32672\(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: dc218060 ld at,-32672\(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: dc218060 ld at,-32672\(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: dc218060 ld at,-32672\(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: dc218060 ld at,-32672\(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: df858020 ld a1,-32736\(gp\)
+ 120000514: 64a50794 daddiu a1,a1,1940
+ 120000518: df858020 ld a1,-32736\(gp\)
+ 12000051c: 64a507a0 daddiu a1,a1,1952
+ 120000520: df858028 ld a1,-32728\(gp\)
+ 120000524: 64a5e9d4 daddiu a1,a1,-5676
+ 120000528: df858020 ld a1,-32736\(gp\)
+ 12000052c: 64a50794 daddiu a1,a1,1940
+ 120000530: 00b1282d daddu a1,a1,s1
+ 120000534: df858020 ld a1,-32736\(gp\)
+ 120000538: 64a507a0 daddiu a1,a1,1952
+ 12000053c: 00b1282d daddu a1,a1,s1
+ 120000540: df858028 ld a1,-32728\(gp\)
+ 120000544: 64a5e9d4 daddiu a1,a1,-5676
+ 120000548: 00b1282d daddu a1,a1,s1
+ 12000054c: df858020 ld a1,-32736\(gp\)
+ 120000550: dca50794 ld a1,1940\(a1\)
+ 120000554: df858020 ld a1,-32736\(gp\)
+ 120000558: dca507a0 ld a1,1952\(a1\)
+ 12000055c: df858020 ld a1,-32736\(gp\)
+ 120000560: 00b1282d daddu a1,a1,s1
+ 120000564: dca50794 ld a1,1940\(a1\)
+ 120000568: df858020 ld a1,-32736\(gp\)
+ 12000056c: 00b1282d daddu a1,a1,s1
+ 120000570: dca507a0 ld a1,1952\(a1\)
+ 120000574: df818020 ld at,-32736\(gp\)
+ 120000578: 0025082d daddu at,at,a1
+ 12000057c: dc2507b6 ld a1,1974\(at\)
+ 120000580: df818020 ld at,-32736\(gp\)
+ 120000584: 0025082d daddu at,at,a1
+ 120000588: fc2507cc sd a1,1996\(at\)
+ 12000058c: df818020 ld at,-32736\(gp\)
+ 120000590: 64210794 daddiu at,at,1940
+ 120000594: 88250000 lwl a1,0\(at\)
+ 120000598: 98250003 lwr a1,3\(at\)
+ 12000059c: df818020 ld at,-32736\(gp\)
+ 1200005a0: 642107a0 daddiu at,at,1952
+ 1200005a4: 88250000 lwl a1,0\(at\)
+ 1200005a8: 98250003 lwr a1,3\(at\)
+ 1200005ac: df818020 ld at,-32736\(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: df818020 ld at,-32736\(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: df818020 ld at,-32736\(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: df818020 ld at,-32736\(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: df858030 ld a1,-32720\(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: df998030 ld t9,-32720\(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: 0320f809 jalr t9
+ 120000634: 00000000 nop
+ 120000638: df998030 ld t9,-32720\(gp\)
+ 12000063c: 673906e0 daddiu t9,t9,1760
+ 120000640: 0320f809 jalr t9
+ 120000644: 00000000 nop
+ 120000648: 3c050000 lui a1,0x0
+ 12000064c: 00bc282d daddu a1,a1,gp
+ 120000650: dca58058 ld a1,-32680\(a1\)
+ 120000654: 1000fea2 b 1200000e0 <fn>
+ 120000658: 00000000 nop
+ 12000065c: 3c050000 lui a1,0x0
+ 120000660: 00bc282d daddu a1,a1,gp
+ 120000664: dca58060 ld a1,-32672\(a1\)
+ 120000668: dca50000 ld a1,0\(a1\)
+ 12000066c: 1000001c b 1200006e0 <fn2>
+ 120000670: 00000000 nop
+ 120000674: df858020 ld a1,-32736\(gp\)
+ 120000678: 64a5071c daddiu a1,a1,1820
+ 12000067c: 1000fe98 b 1200000e0 <fn>
+ 120000680: 00000000 nop
+ 120000684: df858020 ld a1,-32736\(gp\)
+ 120000688: 64a507a0 daddiu a1,a1,1952
+ 12000068c: 10000014 b 1200006e0 <fn2>
+ 120000690: 00000000 nop
+ 120000694: df858028 ld a1,-32728\(gp\)
+ 120000698: 64a5e95c daddiu a1,a1,-5796
+ 12000069c: 1000fe90 b 1200000e0 <fn>
+ 1200006a0: 00000000 nop
+ 1200006a4: df858020 ld a1,-32736\(gp\)
+ 1200006a8: dca50794 ld a1,1940\(a1\)
+ 1200006ac: 1000000c b 1200006e0 <fn2>
+ 1200006b0: 00000000 nop
+ 1200006b4: df858020 ld a1,-32736\(gp\)
+ 1200006b8: dca50728 ld a1,1832\(a1\)
+ 1200006bc: 1000fe88 b 1200000e0 <fn>
+ 1200006c0: 00000000 nop
+ 1200006c4: df818020 ld at,-32736\(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:
+
+00000001201006e0 <_fdata>:
+ \.\.\.
+
+000000012010071c <dg1>:
+ \.\.\.
+
+0000000120100758 <sp2>:
+ \.\.\.
+
+0000000120100794 <dg2>:
+ \.\.\.
+Disassembly of section \.got:
+
+00000001201007d0 <_GLOBAL_OFFSET_TABLE_>:
+ \.\.\.
+ 1201007dc: 80000000 .*
+ 1201007e0: 00000001 .*
+ 1201007e4: 20100000 .*
+ 1201007e8: 00000001 .*
+ 1201007ec: 20120000 .*
+ 1201007f0: 00000001 .*
+ 1201007f4: 20000000 .*
+ \.\.\.
+ 120100808: 00000001 .*
+ 12010080c: 200000e0 .*
+ 120100810: 00000001 .*
+ 120100814: 200006e0 .*
+ 120100818: 00000001 .*
+ 12010081c: 2010071c .*
+ 120100820: 00000001 .*
+ 120100824: 20100794 .*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d
new file mode 100644
index 00000000..b07c8611
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d
@@ -0,0 +1,435 @@
+#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_>:
+ \.\.\.
+ 101007dc: 80000000 .*
+ 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.17/ld/testsuite/ld-mips-elf/emit-relocs-1.d b/binutils-2.17/ld/testsuite/ld-mips-elf/emit-relocs-1.d
new file mode 100644
index 00000000..520d4018
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/emit-relocs-1.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/emit-relocs-1.ld
new file mode 100644
index 00000000..1879ef4c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/emit-relocs-1a.s b/binutils-2.17/ld/testsuite/ld-mips-elf/emit-relocs-1a.s
new file mode 100644
index 00000000..9176f972
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/emit-relocs-1b.s b/binutils-2.17/ld/testsuite/ld-mips-elf/emit-relocs-1b.s
new file mode 100644
index 00000000..0e88c14e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/jalbal.d b/binutils-2.17/ld/testsuite/ld-mips-elf/jalbal.d
new file mode 100644
index 00000000..bc9a5129
--- /dev/null
+++ b/binutils-2.17/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 0x100000a0
+#objdump: -d
+
+.*file format elf.*mips.*
+
+Disassembly of section \.text:
+
+.* <s1>:
+.* 0c00802a jal .*100200a8 <s3>
+.* 00000000 nop
+.* 04117fff bal .*100200a8 <s3>
+
+.* <s2>:
+.* \.\.\.
+
+.* <s3>:
+.* 04118000 bal .*100000ac <s2>
+.* 00000000 nop
+.* 0c00002b jal .*100000ac <s2>
+.* 00000000 nop
+.* \.\.\.
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/jalbal.s b/binutils-2.17/ld/testsuite/ld-mips-elf/jalbal.s
new file mode 100644
index 00000000..4273b9fe
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/jaloverflow-2.d b/binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow-2.d
new file mode 100644
index 00000000..b28b4edb
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow-2.d
@@ -0,0 +1,8 @@
+#name: JAL overflow 2
+#source: jaloverflow-2.s
+#as:
+#ld: -Ttext=0x10000000 -e start
+#objdump: -dr
+#...
+0*10000000: 0c000000.*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow-2.s b/binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow-2.s
new file mode 100644
index 00000000..71acf296
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/jaloverflow.d b/binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow.d
new file mode 100644
index 00000000..b77afe67
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/jaloverflow.s b/binutils-2.17/ld/testsuite/ld-mips-elf/jaloverflow.s
new file mode 100644
index 00000000..4dd98b80
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/jr.s b/binutils-2.17/ld/testsuite/ld-mips-elf/jr.s
new file mode 100644
index 00000000..df487d87
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/jr.s
@@ -0,0 +1 @@
+ jr $31
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/mips-dyn.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/mips-dyn.ld
new file mode 100644
index 00000000..8f734d23
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/mips-elf-flags.exp b/binutils-2.17/ld/testsuite/ld-mips-elf/mips-elf-flags.exp
new file mode 100644
index 00000000..b65e02b1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/mips-elf-flags.exp
@@ -0,0 +1,163 @@
+# Copyright 2003 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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.17/ld/testsuite/ld-mips-elf/mips-elf.exp b/binutils-2.17/ld/testsuite/ld-mips-elf/mips-elf.exp
new file mode 100644
index 00000000..b5ddaefd
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -0,0 +1,245 @@
+# Expect script for MIPS ELF linker tests
+# Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+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}}
+ "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"
+ 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]]
+
+
+# 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"
+}
+
+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"
+}
+
+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"
+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"
+}
+
+run_dump_test "jaloverflow"
+run_dump_test "jaloverflow-2"
+if {$has_newabi} {
+ run_dump_test "jalbal"
+}
+
+run_dump_test "mips16-hilo"
+if {$has_newabi} {
+ run_dump_test "mips16-hilo-n32"
+}
+
+if { $linux_gnu } {
+ run_dump_test "textrel-1"
+}
+
+if $has_newabi {
+ run_dump_test "emit-relocs-1"
+}
+
+if {[istarget mips*-*-linux*]} {
+ # The number of symbols that are always included in the symbol table
+ # for these tests. The 5 are:
+ #
+ # the null symbol entry
+ # the .MIPS.stubs section symbol
+ # the .text section symbol
+ # _gp
+ # _GLOBAL_OFFSET_TABLE_
+ set base_syms 5
+ 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
+}
+
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/mips-lib.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/mips-lib.ld
new file mode 100644
index 00000000..10b41403
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/mips16-1.d b/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-1.d
new file mode 100644
index 00000000..77d1316c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/mips16-1a.s b/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-1a.s
new file mode 100644
index 00000000..a361a653
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-1a.s
@@ -0,0 +1,2 @@
+ .text
+foo1: jr $31
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-1b.s b/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-1b.s
new file mode 100644
index 00000000..11e36f75
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-1b.s
@@ -0,0 +1,2 @@
+ .text
+foo2: jr $31
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-hilo-n32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-hilo-n32.d
new file mode 100644
index 00000000..28c2b61d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/mips16-hilo.d b/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-hilo.d
new file mode 100644
index 00000000..56009834
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/mips16-hilo.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-hilo.ld
new file mode 100644
index 00000000..1b543523
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/mips16-hilo.s b/binutils-2.17/ld/testsuite/ld-mips-elf/mips16-hilo.s
new file mode 100644
index 00000000..79ac2fb8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/multi-got-1-1.s b/binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-1-1.s
new file mode 100644
index 00000000..8f70ee10
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/multi-got-1-2.s b/binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-1-2.s
new file mode 100644
index 00000000..8904b036
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/multi-got-1.d b/binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-1.d
new file mode 100644
index 00000000..d04f9c47
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-1.d
@@ -0,0 +1,8233 @@
+#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 0xcc contains 18 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x184
+ 0x00000005 \(STRTAB\) 0x[0-9a-f]+
+ 0x00000006 \(SYMTAB\) 0x[0-9a-f]+
+ 0x0000000a \(STRSZ\) [0-9]+ \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000015 \(DEBUG\) 0x0
+ 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\) 12
+ 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 8203 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_3817
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1864
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_771
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4264
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4210
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1837
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2960
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2867
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6642
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6292
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2142
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7488
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4532
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4162
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6315
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3350
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5021
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2575
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4355
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_734
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5436
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5066
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1136
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4121
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7019
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4577
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2733
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7278
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2538
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2530
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7926
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_878
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_674
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_637
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_224
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6687
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6600
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6250
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5335
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4677
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4257
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3462
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3092
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2187
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2100
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1035
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7406
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6522
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6152
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2022
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6645
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6295
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4506
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4136
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3988
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3017
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2145
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6685
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5982
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3464
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3094
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2535
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2185
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1682
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7771
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3172
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_373
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3591
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1923
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1777
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6603
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6253
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2103
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2532
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1769
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7880
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4894
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_782
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6648
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6298
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2148
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1724
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6115
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7443
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7232
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5553
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1253
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6569
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6199
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2069
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5592
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1292
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7628
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7490
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5699
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3832
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3421
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3051
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1399
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_597
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_167
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5799
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5654
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5378
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5284
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3740
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1499
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1354
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1078
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1770
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7851
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7814
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5338
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3427
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3057
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1038
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6988
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2488
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4607
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1886
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3834
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3934
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2895
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3014
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7692
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7056
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5943
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3552
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1643
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3891
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6239
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_932
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7841
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7806
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5758
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2927
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1458
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5510
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5160
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1210
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5671
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5008
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1371
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4453
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2712
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6123
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2586
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2581
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7093
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5363
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1063
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4970
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4238
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2862
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_261
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7898
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6719
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6538
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6349
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6168
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2219
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2038
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2588
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1849
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7385
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6304
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_832
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6698
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5414
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5044
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2973
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2198
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1114
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2858
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5728
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1428
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7173
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6696
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2971
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2196
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6691
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2191
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1741
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_51
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4843
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4416
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4318
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4066
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3902
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7564
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4023
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8134
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4459
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4410
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4060
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8171
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7491
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4654
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8137
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7141
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6420
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6070
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6049
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7755
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4659
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4359
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7511
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4614
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1998
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_65
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_20
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4688
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5309
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4393
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1009
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4314
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7543
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4776
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7104
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1808
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4947
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2938
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_769
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4995
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2925
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7965
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7325
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6594
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6465
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5382
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4902
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2578
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2094
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1082
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_852
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6921
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2533
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2421
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7701
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3595
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2577
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7362
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7326
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6688
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3665
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2188
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4047
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5615
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5245
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3522
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2838
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1315
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_817
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6643
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6293
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5959
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5205
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4004
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2143
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1659
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7732
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7331
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1890
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7792
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5133
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3179
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5200
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3941
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7986
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3136
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6529
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6159
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5569
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2029
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1269
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3982
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7586
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6660
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2160
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_84
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7777
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4231
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_752
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8048
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6017
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3472
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_715
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4669
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2928
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7194
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5129
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1779
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_435
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4515
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4379
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4145
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4334
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_49
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_458
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4593
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3529
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4963
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_930
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4100
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_495
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7468
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3842
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3671
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7292
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7062
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7027
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5900
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1600
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3115
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8001
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_338
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5713
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4274
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2936
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1413
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6508
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6138
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2008
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1876
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7412
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2550
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7297
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_747
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7642
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4709
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_986
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7949
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7046
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2931
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7687
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_920
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4849
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4806
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7868
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7647
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7514
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3232
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4800
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_430
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_664
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_629
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_214
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6968
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2468
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4680
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_328
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5460
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5090
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1160
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4723
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2875
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_953
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6960
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6725
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6355
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2460
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2225
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8069
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5992
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5833
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1692
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1533
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6726
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6494
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6356
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6312
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2226
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_846
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6768
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6398
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6313
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2268
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6769
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6399
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5999
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2269
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1699
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_916
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_454
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_417
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7890
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7107
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3277
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6815
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2315
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7551
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5892
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5857
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3654
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1592
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1557
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_192
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4217
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5330
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1030
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5732
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1432
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6924
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5897
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2424
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1597
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5762
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1462
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5020
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7000
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5435
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5065
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1135
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_397
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1855
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_291
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_377
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_35
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6844
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6116
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5524
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5174
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4892
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2344
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1903
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1224
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8080
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5442
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5072
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4463
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1142
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6451
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_510
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3945
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7853
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7816
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5914
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1614
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_585
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_155
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2897
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1775
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8150
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_871
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8113
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_361
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7736
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4551
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4181
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2596
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2568
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_667
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_217
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4743
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5373
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2525
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1073
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7144
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7024
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3607
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_253
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5491
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1191
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4423
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4073
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2983
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1927
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6866
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6678
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4855
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4665
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2366
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2178
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_432
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_321
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_256
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8042
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6635
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6285
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2135
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4660
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4035
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_276
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4961
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4853
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_466
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5628
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5540
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5485
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5258
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5190
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4106
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4032
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3113
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2798
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1328
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1240
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1185
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4342
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5009
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4468
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4426
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4076
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_491
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3110
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1967
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5542
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5192
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4591
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4420
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4070
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1242
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_882
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4596
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3432
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3062
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5215
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4465
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8103
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6650
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2150
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5975
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1675
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7596
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8005
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7801
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7181
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6544
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6174
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3021
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2900
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2044
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4921
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7680
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7366
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3477
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6574
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5970
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2074
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1670
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4624
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2918
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7246
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5938
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5930
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1638
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1630
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4381
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6762
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6392
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5587
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5580
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3157
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2262
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1287
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1280
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5422
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5052
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1122
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4385
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6764
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6394
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5585
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2264
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1285
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6501
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6131
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2001
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6891
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2716
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2391
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7201
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5503
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5153
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1203
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6226
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2789
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5932
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1632
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6587
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3794
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2087
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5548
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5198
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2819
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1248
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8132
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7313
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5469
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5099
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4993
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1169
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2830
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7281
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7184
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6721
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6351
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4775
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2632
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2221
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2540
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2638
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_957
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5888
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1588
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3507
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2639
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_474
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7631
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2634
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1995
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7639
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7599
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7855
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7818
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6411
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6061
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7289
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7892
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6733
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6363
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2233
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7566
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7554
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1812
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5981
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5023
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2996
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2509
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1681
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7154
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7119
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6917
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2417
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_399
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6322
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1962
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5846
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5619
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5438
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5249
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5068
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1546
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1319
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1138
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7238
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6778
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5988
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5471
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4503
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4133
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2278
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1688
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1171
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5204
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6801
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6480
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2301
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5598
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1298
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_534
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_104
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1958
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_538
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_108
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5591
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3919
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1291
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3218
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2890
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7268
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6458
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6983
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2483
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7524
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7006
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3554
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5723
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3127
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1423
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4856
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2946
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8041
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5815
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1515
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3259
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4746
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3588
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1916
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4858
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4371
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1783
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7803
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7674
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4421
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4071
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4466
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4966
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4816
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4813
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3438
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3068
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6949
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4030
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2751
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2449
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6808
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2308
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7618
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8004
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6904
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4810
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3973
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2404
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3847
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3332
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3904
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3895
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_654
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_617
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_573
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_204
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_143
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7066
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_283
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4715
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4711
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3897
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3802
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7041
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5821
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5013
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4761
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1521
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5977
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2673
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1677
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4983
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3141
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4347
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1938
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_799
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8179
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3938
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7416
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5426
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5056
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1126
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3375
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7496
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7954
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7919
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7451
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2741
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_342
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_305
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7394
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5772
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5429
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5059
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1472
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1129
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_696
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_246
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5343
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1043
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3722
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7494
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6034
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3007
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1798
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8099
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4012
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3808
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3100
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6619
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6429
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6269
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6079
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2119
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3569
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7721
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8094
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3186
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7953
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7918
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7186
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5302
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3954
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1002
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_198
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7230
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6219
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3968
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4326
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3493
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_295
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7111
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5388
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1088
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7764
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3863
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_761
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_677
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_227
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2646
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8122
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2994
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2959
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7912
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7556
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4243
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_726
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8192
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6876
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6022
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2376
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6415
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6065
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4998
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4786
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2648
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5801
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1501
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_403
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6731
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6361
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2231
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6776
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2276
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2603
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6931
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2431
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_550
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_515
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_120
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6320
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4202
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6705
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6335
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2205
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_641
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_606
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7012
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7453
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2853
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_963
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4288
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_279
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_960
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2981
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_540
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_503
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_110
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_45
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7699
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5738
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1438
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5868
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3195
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1568
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7351
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3580
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7196
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4701
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_937
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5784
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1975
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1484
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6470
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5860
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1560
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5626
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5256
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2726
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1326
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6830
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5213
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3301
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2330
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7879
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5669
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5299
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3346
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1369
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4811
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2664
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6541
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6171
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3027
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2041
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7505
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6953
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3736
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2727
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2453
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_53
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_10
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1790
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_270
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_809
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_264
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7174
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5111
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4846
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3117
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3545
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5878
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2979
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1578
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_929
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_50
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4638
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4304
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3152
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7247
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6794
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2294
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_59
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_16
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4684
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4018
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7498
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5016
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3637
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4456
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3363
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4987
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4020
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3765
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1983
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_797
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_553
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_518
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_123
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7677
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3264
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7992
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6584
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4407
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4057
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2084
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_685
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_235
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7957
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7544
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1822
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5996
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5968
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1696
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1668
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8067
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7913
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4482
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3643
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7403
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7284
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5925
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4872
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3993
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3536
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1625
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5998
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1698
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7311
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5607
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5237
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1307
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5578
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3755
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1948
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1278
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5600
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5535
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5230
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5185
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1300
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1235
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6889
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3560
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2389
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5647
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5277
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3861
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3753
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1347
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1898
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_71
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3326
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1717
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_369
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6468
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2774
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4739
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3491
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3394
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3320
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_77
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_74
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7016
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6423
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6073
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7634
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3365
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5550
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1250
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7135
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4366
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6555
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6185
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2055
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8081
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6208
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5474
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1174
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2694
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_814
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4918
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3281
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_780
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7229
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2801
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7587
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4500
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4130
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6877
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5662
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5292
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2377
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1362
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4547
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4177
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2763
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2601
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_592
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_162
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6248
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5217
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3958
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7455
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5664
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5294
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1364
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6818
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6205
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4917
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2764
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2318
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5791
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4501
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4131
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1491
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2739
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1889
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4548
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4178
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2594
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1919
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_998
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3893
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3217
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2944
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1930
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8181
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5621
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5251
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3675
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1732
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1321
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5940
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1640
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3258
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7053
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3930
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_653
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_616
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_203
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_188
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1739
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5506
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5156
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1734
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1206
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4117
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1834
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4272
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5752
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1452
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2823
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7113
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6990
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6955
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2490
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2455
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_883
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6792
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2292
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2662
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8189
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_388
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6653
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5633
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5263
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2153
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1333
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4413
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4063
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_286
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6045
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5420
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5050
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4352
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1120
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5530
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5180
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3502
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1230
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8054
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8019
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6002
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4803
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2670
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_925
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_699
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_249
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6438
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6088
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5222
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_445
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1979
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5678
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3403
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3033
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1378
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6820
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2320
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5963
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1663
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5144
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2719
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6914
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4652
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2543
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2414
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1802
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4991
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8168
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6858
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2358
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6610
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6260
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5920
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5467
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5097
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2110
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1620
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1167
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6854
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2354
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7400
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6108
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5101
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4311
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2825
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7887
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3910
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5573
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1273
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4397
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6463
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7694
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4541
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4171
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7098
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_766
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6514
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6144
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3784
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2014
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4543
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4173
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_611
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3716
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6119
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5849
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4044
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1549
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7791
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7013
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4954
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_337
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5804
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4673
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3710
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1504
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7448
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4472
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_968
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7271
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4862
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4001
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3590
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7237
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2704
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_376
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5850
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4911
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3120
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1550
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7621
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3611
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_484
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8116
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3661
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_993
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_423
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7683
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4586
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2898
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7378
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4584
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6409
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6059
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3247
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7848
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4913
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5379
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1079
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_750
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7666
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_433
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_398
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7050
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6014
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1841
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7256
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5336
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2708
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1036
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7845
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_713
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7884
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_467
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7748
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7606
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4694
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3294
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3165
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5672
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1372
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6236
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4510
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4140
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7530
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6869
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2369
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4695
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4555
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4185
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4925
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4765
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6627
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6277
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2127
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6715
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6345
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4622
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2754
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2215
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6861
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6305
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2559
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2361
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7480
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4292
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2768
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_745
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8153
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8011
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6302
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5729
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1429
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6233
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4279
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7689
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6300
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1746
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_333
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7219
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4236
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7294
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6669
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2860
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2169
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1742
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5871
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1571
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_478
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5776
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1476
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5315
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1015
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7359
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3686
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1748
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4572
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5631
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5261
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1331
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5676
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1376
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1703
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2679
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5220
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7644
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3329
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5314
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1014
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_956
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_299
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4727
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4629
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4942
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_910
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7860
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7825
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4771
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7729
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2500
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_854
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6880
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2380
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_568
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_138
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6813
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6498
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2313
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7160
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7123
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3208
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2776
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_919
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5370
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3872
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2909
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2880
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1070
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1826
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_311
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_175
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4642
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_819
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6024
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4860
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_879
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_365
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4007
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5441
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5071
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1141
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_372
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6848
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2348
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1920
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4736
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4470
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8074
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6417
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6067
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3746
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_267
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4332
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6455
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4363
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3719
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3204
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8147
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6985
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3940
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2485
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4956
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8079
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_622
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_885
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7921
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3425
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3055
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_753
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2592
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6663
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3356
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3012
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2163
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3887
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2986
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3468
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3098
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2845
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7076
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7039
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2599
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8182
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5484
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4741
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1184
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4377
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3515
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2892
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_711
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_894
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_716
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4976
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8166
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6943
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6430
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6080
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4968
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2443
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4923
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3624
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7426
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6120
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6717
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6347
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4598
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2711
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2217
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6535
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6165
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2555
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2035
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6805
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5789
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4553
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4183
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2305
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1489
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2553
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6624
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6274
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2124
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7944
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7907
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6542
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6172
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2517
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2042
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7600
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5368
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1874
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1068
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2514
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6620
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6270
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2120
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5323
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1877
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1023
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7981
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7250
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6665
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2165
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7213
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1941
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4570
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5225
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7147
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6473
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5636
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5266
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5149
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1336
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_773
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4707
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2813
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6035
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2949
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1794
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3818
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3566
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7142
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_736
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5106
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4773
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4687
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1863
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1701
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6585
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5148
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4213
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2085
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7512
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7317
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6039
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7866
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6109
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5718
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5105
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1418
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2903
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3401
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3031
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2905
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_60
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1839
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5994
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3448
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3078
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1694
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7203
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7367
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3351
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7517
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7105
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5026
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_29
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6975
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3695
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2475
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4940
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2570
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_855
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_88
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2730
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7461
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_314
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6680
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2180
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_33
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3916
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8013
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5890
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5855
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1590
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1555
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_30
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5692
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1392
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7569
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7472
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2952
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1762
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7786
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7737
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7163
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7126
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_179
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3313
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3252
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_82
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3703
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3019
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7533
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3741
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_533
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_103
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3838
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6703
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6333
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2203
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2855
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5720
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1420
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7373
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_822
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4246
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1819
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5814
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1514
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2942
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1989
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5754
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3111
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1454
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5327
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3211
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1925
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1027
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_565
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_528
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_135
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7743
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3709
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3297
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7604
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4699
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_632
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_834
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6946
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3441
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3071
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2446
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6571
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2071
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3180
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3443
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3073
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_58
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_15
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5019
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7217
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6234
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3854
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3573
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2510
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3372
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3158
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7872
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3762
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6823
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4227
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2323
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1804
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6582
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3811
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2082
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6915
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2415
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1797
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1706
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7839
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3486
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4129
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2816
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5341
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3484
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2683
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1041
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6547
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6177
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2047
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7240
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4538
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4168
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3813
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7833
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3951
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_952
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_790
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3508
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_542
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_505
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_112
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8156
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4432
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4082
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_915
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3245
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3923
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_172
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7254
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7048
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4997
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3594
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6523
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6153
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5300
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2023
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1000
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6113
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5136
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3410
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3040
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5769
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2920
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1469
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_197
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8159
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7205
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3455
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3085
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5386
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3825
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1086
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7624
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5527
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5177
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4241
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3202
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1227
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1854
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7279
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5761
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1461
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1868
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6526
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6156
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2991
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2956
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2026
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_783
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5202
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4475
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3288
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_903
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3981
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8119
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6440
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6090
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6872
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2372
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1960
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7669
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6443
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6110
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6093
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7629
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4822
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7088
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4107
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2698
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7199
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7473
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4908
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4282
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7663
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7430
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4200
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4205
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3319
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7438
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4286
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_868
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6402
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6052
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_390
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5863
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1563
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8021
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7300
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7347
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3627
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7383
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6488
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7348
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6485
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7222
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7795
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7753
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7388
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5395
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3618
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1095
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5780
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1480
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5398
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1098
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7798
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6901
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2401
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8060
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8023
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1980
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7717
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6625
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6275
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2125
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_355
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7876
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7067
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7750
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_838
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5501
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5151
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3542
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1201
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7718
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2515
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7274
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5546
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5196
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3760
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3405
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3035
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1246
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7758
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5936
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1636
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5748
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1448
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1933
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3636
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3370
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5317
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3960
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2547
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1017
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6912
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2412
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5745
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5355
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3263
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1445
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1055
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7417
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6838
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6504
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6134
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5352
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2338
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2004
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1052
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5885
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4295
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1585
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3856
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_770
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4404
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4054
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2877
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6884
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2384
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7080
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_733
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6657
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5563
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2157
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1263
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6106
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4449
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4401
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4099
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4051
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3530
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6221
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1945
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_457
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_436
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4446
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4096
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3864
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3641
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4127
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4836
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3653
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1992
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5208
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2690
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3876
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6211
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5843
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3868
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1543
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5736
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4645
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1893
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1436
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6978
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3823
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2478
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_812
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4252
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5617
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5247
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3498
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3494
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1811
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1317
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_676
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_639
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_226
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5955
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1655
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5705
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3453
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3139
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3083
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1405
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5953
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3944
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1653
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7380
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4737
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7022
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5917
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1617
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4865
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_649
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2883
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6742
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6372
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4364
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2242
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5594
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5520
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5170
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1294
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1220
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5565
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1265
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_490
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3470
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2722
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4792
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4757
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_646
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6874
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2374
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_784
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8047
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7167
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_961
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_182
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4636
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4632
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2985
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5321
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2598
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1913
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1021
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_864
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6707
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6337
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4662
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2207
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_827
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_449
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_185
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4233
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2618
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2848
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6700
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6330
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2200
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6785
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6747
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6377
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4109
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3673
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3587
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2285
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2247
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1736
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_346
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_309
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1858
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7537
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2617
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_453
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_416
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6701
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6331
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2201
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4494
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_869
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_494
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7570
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2612
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1970
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6748
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6378
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3972
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2248
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_577
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_147
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6835
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2335
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7873
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2977
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5666
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5366
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5296
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1366
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1066
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5417
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5210
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5047
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1117
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5875
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5002
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1575
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_263
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6009
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5458
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5088
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3840
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2724
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1158
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4391
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6655
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2155
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1830
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4276
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6317
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4528
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4440
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4158
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4090
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_681
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_231
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3937
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2948
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4442
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4092
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_556
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_126
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6612
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6262
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2112
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4115
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8063
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8026
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6038
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4875
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_684
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_488
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_234
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4317
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6552
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6182
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2052
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6614
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6264
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5702
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2114
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1402
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7691
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7352
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4358
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_302
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7978
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7287
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2545
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5716
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4830
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2504
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1416
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7722
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5603
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5233
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1303
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_383
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4839
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1955
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_324
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7395
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4487
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6606
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6256
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4322
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2106
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2734
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5027
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4485
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3994
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3146
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7572
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6852
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2352
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7976
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7099
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4832
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3828
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_610
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7637
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3991
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7765
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7049
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_429
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6511
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6141
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4734
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2011
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4369
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4361
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7449
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6520
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6150
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2020
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6630
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6597
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6280
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4602
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2130
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2097
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3599
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3413
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3043
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2879
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_426
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5407
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5037
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4788
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1107
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7705
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5984
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3986
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3458
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3088
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1684
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2563
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3959
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8117
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6244
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5134
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2702
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_99
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5910
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1610
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_191
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_595
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_165
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_96
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6203
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3558
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6567
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6197
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2520
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2067
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_877
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6201
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5790
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1490
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_268
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7939
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5482
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2761
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1884
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1182
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6673
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2173
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3163
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2655
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7937
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4519
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4149
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3029
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_559
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_129
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_40
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4888
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3949
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5447
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5077
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4104
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1147
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_939
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5623
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5253
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4884
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4498
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1323
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7936
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8140
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_672
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_635
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_584
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_222
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_154
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7603
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7211
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7975
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_987
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7132
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4626
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7421
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_461
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7502
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4690
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5508
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5158
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1208
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7899
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6950
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4290
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4220
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2450
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8154
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6894
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5113
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2394
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5423
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5053
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1123
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7216
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6710
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6340
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4767
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2210
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8105
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6755
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6385
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2255
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2625
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_464
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7834
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7335
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3109
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3681
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1847
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6492
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4657
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_668
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_218
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_955
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6479
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2781
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6436
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6086
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5340
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3908
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1040
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6000
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2963
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_603
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5010
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5889
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4262
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1589
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_67
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_22
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_598
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_168
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8059
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2502
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4837
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4394
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4265
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3182
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_918
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_68
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_23
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6772
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2272
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4721
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3105
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1996
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5682
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1382
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4877
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_28
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7574
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7482
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3956
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1752
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_521
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7820
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_786
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5529
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5179
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3759
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3005
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1229
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4402
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4052
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3192
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4640
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7253
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3871
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6927
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6829
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2427
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2329
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7968
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4447
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4097
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7155
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7009
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5385
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1085
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3369
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2642
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_32
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7071
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7034
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6971
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2471
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7192
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2997
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1959
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_973
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_532
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_102
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1772
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_292
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7661
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7525
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5525
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5175
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1225
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_947
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6246
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7083
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3879
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6842
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6021
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2342
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5915
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1615
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8174
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4429
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4079
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7970
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6414
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6064
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6671
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2171
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2913
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2561
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_624
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7659
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6936
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2436
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4339
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_257
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6530
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6160
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5947
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2989
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2030
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1647
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_273
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5812
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1512
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6563
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6193
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5797
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2063
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1497
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5919
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5404
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5034
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1619
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1104
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5517
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5167
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1840
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1217
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3513
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3304
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1977
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4308
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3976
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4972
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7433
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5557
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1257
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8109
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5124
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5006
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3349
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5121
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7931
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6941
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2441
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8051
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8016
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_95
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_92
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4563
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4193
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7616
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2820
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4305
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2806
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_688
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_238
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2676
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6575
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5492
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4692
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2668
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2075
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1192
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4348
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_924
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7549
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2623
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7044
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4819
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6798
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2298
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7179
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6753
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6383
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2253
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4760
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4525
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4155
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2744
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8139
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6043
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_891
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_776
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4933
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4526
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4156
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4112
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7562
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4568
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4198
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4113
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5642
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5272
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1342
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4569
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4199
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3799
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7282
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5907
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4520
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4150
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2811
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1607
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_9
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4615
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7476
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6770
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2270
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4612
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3692
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3657
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5774
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1474
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8144
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7632
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7316
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7266
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3130
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3532
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1750
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_739
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4724
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_978
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3562
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3133
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1718
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3235
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7782
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5680
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1380
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6973
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5685
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3009
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2473
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1385
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3324
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5138
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5601
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5231
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3714
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1301
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_312
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2777
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1712
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5648
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5278
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1348
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5735
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2841
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1435
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7235
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6325
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5551
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4479
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1251
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4869
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_976
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_366
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5895
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1595
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_402
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6736
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6366
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6249
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3173
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2236
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2640
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1824
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_37
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3291
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5555
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4436
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4086
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1255
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4826
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4666
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3176
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_394
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7703
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6206
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3428
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3340
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3058
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7072
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7035
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3886
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4038
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2911
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7375
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3342
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5512
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5162
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1212
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7788
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3015
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8050
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8015
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7422
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3775
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_359
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4451
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6126
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7466
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5452
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5082
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1152
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8085
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7675
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5514
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5164
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4795
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1214
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7074
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7037
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5219
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4374
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3770
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8187
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5945
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5941
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1645
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1641
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7745
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6483
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5904
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3730
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1604
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_468
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3739
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_884
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8008
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3387
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3380
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3222
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6905
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3385
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2405
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_990
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6446
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6096
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8131
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6010
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4026
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7424
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7389
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3732
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5822
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3225
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2791
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1522
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5877
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1577
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_448
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5411
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5041
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3634
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1111
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_775
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3269
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3261
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5497
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3144
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1197
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4119
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4841
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4938
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1982
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3688
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7333
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7993
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4939
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_738
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3858
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_798
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7759
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7958
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3815
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3103
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3791
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7941
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7904
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6032
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3488
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2889
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5103
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3445
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3189
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3075
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8045
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4211
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6427
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6077
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4533
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4163
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1861
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3912
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1947
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4809
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7187
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1755
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4122
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6329
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3419
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3049
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4578
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3788
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3460
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3090
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3004
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2771
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4280
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3398
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2843
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_767
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8111
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7557
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8032
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4258
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5852
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3526
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1552
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7479
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5445
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5075
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4867
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1145
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4824
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3523
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_404
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1965
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5794
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4477
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2697
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2606
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1494
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_487
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5610
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5240
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3667
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1310
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4434
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4084
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3539
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5655
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5285
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1355
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1725
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_872
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7843
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7808
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7086
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6441
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6091
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5402
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5032
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1102
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2797
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7168
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3557
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8100
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7882
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7626
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5488
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3830
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1188
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4749
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1881
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4608
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2736
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7664
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4704
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7436
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7302
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4345
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3162
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6991
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6956
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2491
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2456
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_350
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6833
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5902
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2333
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1602
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3737
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7538
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6400
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6050
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6405
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6055
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3621
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7259
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3777
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_994
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6486
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_700
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4302
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4028
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2756
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7594
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3302
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3540
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6007
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5827
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4388
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1527
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3347
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_836
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_315
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8055
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7276
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7609
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3572
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3579
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8092
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5109
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5818
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1518
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7241
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6590
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2090
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_731
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4419
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4069
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5146
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_555
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_125
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2826
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5742
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1442
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6963
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3907
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2463
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7121
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5571
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1271
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5961
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3644
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1661
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7206
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5836
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1536
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7094
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4946
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3239
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5430
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5060
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1130
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5463
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5093
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1163
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4676
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6495
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4718
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4948
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6886
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6604
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6254
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2386
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2104
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6216
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_763
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4531
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4161
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_728
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8090
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4576
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7489
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4903
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_723
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6649
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6601
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6299
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6251
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4120
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2149
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2101
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6646
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6296
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5522
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5172
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4505
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4135
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2146
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1222
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5841
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1541
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6521
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6151
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2021
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2536
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_251
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7770
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3463
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3093
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3929
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2833
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7444
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5131
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4895
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3205
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1922
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1906
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1776
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5567
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1267
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5475
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3592
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1768
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1175
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6845
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3248
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2345
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1723
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7811
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7684
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6452
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1778
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_513
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5698
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1398
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_755
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_594
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_164
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5653
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5339
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5283
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1353
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1039
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_648
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4270
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3660
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1844
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3833
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3426
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3056
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_662
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_627
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_212
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_190
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4630
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3013
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6568
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6198
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2068
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3469
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3099
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4964
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3420
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3050
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1911
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4341
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_718
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4753
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7693
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_451
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_414
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5670
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5409
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5039
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1370
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1109
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6308
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3890
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3512
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7593
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6836
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5007
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2793
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2336
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3678
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_583
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_387
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_153
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7611
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8164
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6433
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6083
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4594
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4239
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6309
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5873
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1573
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2861
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_282
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_55
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_12
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7654
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6694
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2194
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4384
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4353
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7711
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_683
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_233
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_52
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3922
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_837
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8135
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3379
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3769
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_18
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4982
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3729
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3966
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3899
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8172
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6421
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6071
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6040
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3798
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1740
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3407
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3037
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4655
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3336
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_695
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_245
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6476
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3726
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7725
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4312
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4689
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4260
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2636
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7470
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7404
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7398
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7304
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3998
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2967
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2758
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_841
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4398
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4268
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7149
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3339
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4223
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2870
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7768
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7696
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_804
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6766
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6466
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6396
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2266
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7261
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6517
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6310
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6147
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4008
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2017
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5650
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5280
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1350
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6469
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6102
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8097
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7519
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6424
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6074
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7762
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6558
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6188
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3274
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2058
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7017
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7096
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5652
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5383
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5282
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4994
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1352
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1083
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6920
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2539
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2420
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7969
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7925
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4901
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1765
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5764
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4048
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1464
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5805
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2837
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1505
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5346
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4618
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4005
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1894
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1046
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_590
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_160
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5957
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1657
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7857
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7446
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3989
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7341
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7323
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1728
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1720
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_551
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_516
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_121
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3942
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1891
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7894
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6934
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4728
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2434
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_900
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6819
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5912
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5697
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2319
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1612
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1397
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6561
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6191
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2061
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7339
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6802
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5695
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2302
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1395
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_660
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_625
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_210
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6816
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5613
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5243
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2316
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1313
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_85
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7392
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1722
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_759
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3884
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5658
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5288
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3839
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1358
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7355
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3306
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_363
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6127
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1859
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7054
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7869
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1814
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_274
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7709
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4790
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4755
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4928
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4592
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4962
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3670
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_712
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3433
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3063
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2804
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3220
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3330
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8087
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3022
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_689
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_239
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5229
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4513
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4143
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6507
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6137
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3478
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2007
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1871
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4620
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5583
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4558
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4188
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2584
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1283
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_336
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3763
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7456
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5973
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1943
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1673
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2934
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4714
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3227
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_922
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6826
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4658
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2326
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3767
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3720
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3267
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6890
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3724
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2390
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6490
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4774
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2784
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3377
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3373
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6967
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4263
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3790
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2467
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6316
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4610
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3334
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2874
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5881
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1581
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6723
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6641
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6353
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6291
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2223
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2141
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1897
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8068
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6857
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2357
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3649
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1836
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_371
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7499
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3604
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_547
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_117
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6462
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_560
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_523
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_130
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7927
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5891
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5856
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1591
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1556
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6608
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6258
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2108
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_194
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5733
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3650
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3190
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1433
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6213
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2537
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_651
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_614
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_201
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6027
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5305
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1005
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6686
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4218
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2186
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1856
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4209
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_332
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_36
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4781
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2747
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6602
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6252
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5392
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2102
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1092
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6840
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2340
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_768
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_375
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7581
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2531
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1771
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6647
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6297
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2147
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_498
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8176
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7529
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1767
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7960
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7735
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6989
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2489
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_587
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_157
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7850
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7813
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8141
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7159
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7001
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5490
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1190
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_934
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4036
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2896
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6782
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2282
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1926
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_452
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_415
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4427
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4077
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2652
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4742
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_580
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_150
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6629
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6279
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4859
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4661
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4105
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2129
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_439
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6124
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2707
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2799
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6948
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4971
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2926
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2448
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4102
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4033
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8106
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7796
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6539
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6169
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3846
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2039
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4469
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_833
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6573
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2073
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3576
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_278
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7897
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7386
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7365
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3848
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2859
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5971
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5786
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5504
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5154
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1671
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1486
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1204
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_896
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7751
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5116
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3431
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3061
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2672
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3476
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3803
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4979
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5581
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5549
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5199
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3020
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1281
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1249
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7895
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3114
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5421
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5051
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1121
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7756
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6763
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6393
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2263
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6505
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6135
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3795
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2005
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8136
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6892
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2392
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6897
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6548
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6178
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2397
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2048
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_983
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_472
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2519
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6617
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6267
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2740
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2117
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4613
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4298
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_327
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_301
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5308
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1008
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_975
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3170
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3926
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2633
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7209
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6224
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5468
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5098
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1168
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3787
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1951
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6720
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6350
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2999
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2818
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2220
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7151
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7116
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3241
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6729
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6359
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5349
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4648
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2229
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1049
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3694
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3659
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3397
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6812
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2312
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_796
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_599
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_169
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6592
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2092
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_959
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4255
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7521
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_856
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4785
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2576
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5333
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1033
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_720
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7858
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7381
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_811
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7153
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7118
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5209
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2951
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7239
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1961
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_367
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7681
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4899
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3284
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2507
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7702
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3253
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_904
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7520
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6679
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2179
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_360
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7269
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2569
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7523
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7244
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3882
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4230
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3473
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2650
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3550
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_887
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4668
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1883
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6636
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6286
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4517
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4147
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3555
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2136
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8000
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5376
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4335
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2526
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1076
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6780
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3212
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2280
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4605
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3589
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3160
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4424
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4074
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4817
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1786
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_569
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_139
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6238
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3974
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3298
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3168
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8049
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4814
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3582
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3779
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3977
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3123
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3734
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7579
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_502
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7619
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7467
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3845
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_658
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_208
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6651
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3025
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2151
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8161
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7840
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7805
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3843
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3389
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1875
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6903
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3344
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2403
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6995
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5369
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2495
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1069
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5324
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4273
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3436
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3066
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1024
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3894
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3430
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3060
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3905
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5939
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5820
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3896
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2919
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1639
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1520
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3475
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7045
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3963
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3801
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4389
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1846
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1937
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4986
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3518
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4346
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7332
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3939
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5012
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5425
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5055
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3361
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2742
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1125
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7150
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7115
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5834
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3628
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1534
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7393
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5719
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1419
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5461
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5091
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1161
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7185
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5344
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1044
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7997
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6319
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4870
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2541
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_340
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_303
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7760
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8098
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1999
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7597
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7108
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_62
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4480
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2966
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2689
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4719
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1758
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_691
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_241
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7720
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3751
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_791
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8123
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5303
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1715
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1003
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7231
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7515
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5991
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1691
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7950
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7915
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7110
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6499
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5688
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3690
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3655
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1388
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_176
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7952
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7917
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5645
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5389
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5275
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3492
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1345
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1089
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6922
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4325
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3862
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2422
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6977
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2477
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7763
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7911
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7555
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1904
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7440
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4244
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_902
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6849
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2349
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2882
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5660
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5290
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1360
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3520
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7852
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7815
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6456
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4958
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7552
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4915
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4203
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4464
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3614
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4891
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4206
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4588
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5726
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4545
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4289
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4175
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1426
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_965
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_621
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7145
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5371
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2982
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2567
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1071
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_863
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4247
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5796
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3900
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2524
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1496
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3674
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6677
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2847
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2177
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7079
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5867
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1567
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_826
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6634
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6284
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5739
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5216
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3510
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2134
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1439
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7740
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7350
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6129
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4560
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4190
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1974
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_861
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7390
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5541
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5191
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3932
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1241
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7712
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5757
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4854
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1457
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1730
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4034
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7182
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6540
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6170
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2040
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_824
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7800
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7429
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6952
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2452
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6806
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6545
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6175
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5362
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2306
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2045
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1062
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2660
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_54
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_11
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4623
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7485
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4382
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2917
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2865
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5937
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3806
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1637
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4303
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_680
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_230
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7090
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6790
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2290
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7305
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4639
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_17
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5586
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3118
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1286
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3800
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_444
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_409
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6502
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6228
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6132
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2002
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5502
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5152
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1202
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5740
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1440
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5931
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1631
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7459
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7200
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6588
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4930
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2088
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5547
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5197
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1247
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_78
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7314
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6583
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2083
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_645
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7288
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5779
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1479
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6519
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6149
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2019
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7991
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4323
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7370
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7956
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7783
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6104
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3327
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3642
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2692
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7342
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3561
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5024
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1807
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1899
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5848
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3785
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1548
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7638
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3002
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5844
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1544
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_75
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_72
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5439
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5069
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1139
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_675
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_638
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_225
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4240
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4672
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7567
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2995
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5473
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4679
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1173
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6209
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3395
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_942
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6918
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2649
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2418
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4504
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4134
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_785
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_447
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6323
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_907
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_483
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7560
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6779
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3918
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2279
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_486
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5866
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3663
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3126
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1566
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_181
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5663
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5293
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1363
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5721
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4744
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1829
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1421
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5405
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5035
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2595
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1105
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_349
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4285
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1914
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5792
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1492
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5448
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5078
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2945
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1148
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_758
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7614
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_995
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_46
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3198
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_931
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7190
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4425
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4075
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1733
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_576
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_146
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4493
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_880
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4815
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7657
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7133
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6622
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6272
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2122
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5620
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5250
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1918
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1320
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_899
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7503
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5629
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5259
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3548
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1329
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7877
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7651
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6231
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5712
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2822
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1412
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_262
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6667
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4847
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2167
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4712
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1936
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3155
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8058
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5226
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2678
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6046
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5976
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3685
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1676
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_475
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5531
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5181
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1231
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6003
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5637
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5267
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4351
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1337
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8053
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8037
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8018
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6439
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6089
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1978
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5533
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5183
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1233
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4457
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4021
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5964
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1664
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7058
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6913
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6553
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6183
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2413
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2053
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5771
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1471
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7051
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6509
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6139
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2009
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7990
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5579
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4990
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3008
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1279
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8169
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5969
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1669
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5929
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5921
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4011
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2682
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1629
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1621
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8071
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7401
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2907
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1866
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1799
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6107
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4310
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_386
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4778
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7955
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5576
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3568
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1276
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7264
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6855
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5536
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5186
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4396
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3911
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3417
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3047
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2355
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1236
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5926
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5574
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1626
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1274
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7824
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6512
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6142
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3953
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2012
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6460
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3505
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_801
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5142
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3717
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5923
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1623
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7727
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7014
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6598
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2098
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5539
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5189
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4542
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4172
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1239
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7408
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7011
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8121
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2990
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2955
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2886
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5480
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1180
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6875
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4674
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2375
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_421
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6734
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6364
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5803
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4829
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2234
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1503
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4999
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7272
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5478
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4898
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3121
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1178
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_401
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4507
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4137
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2604
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5433
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5063
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2705
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1133
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7622
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7338
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_873
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4585
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3836
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4042
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3289
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3246
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7810
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4439
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4089
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_757
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_710
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4912
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7575
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7357
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1842
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7698
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4635
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7667
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6928
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2428
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3466
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3166
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3096
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3010
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1973
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7708
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6750
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6380
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2250
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7227
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7197
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5808
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1508
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6752
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6382
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4883
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2252
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4455
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2725
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1784
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7210
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1789
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7257
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6628
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6278
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3619
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2665
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2128
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_749
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6864
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2364
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2794
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2557
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8010
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7588
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6301
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5399
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4412
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4062
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1099
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2628
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2620
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5879
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1579
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5870
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1570
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3150
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6797
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2512
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2297
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3543
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1984
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7607
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6795
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4414
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4064
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2295
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_465
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5749
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4845
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1449
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6713
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6343
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4804
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3516
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2213
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1707
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7497
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7175
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5014
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2622
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4984
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7861
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7826
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6758
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6388
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2258
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5356
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4406
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4056
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1056
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_269
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6422
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6072
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2759
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3364
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_170
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5427
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5057
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1127
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2714
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3106
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1821
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7545
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7052
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5967
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4726
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1667
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4770
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3147
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5924
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5608
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5238
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5025
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3992
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1624
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1308
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7402
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2518
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6974
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5997
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5966
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2474
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1697
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1666
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5577
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4320
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1277
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_431
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4430
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4080
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5990
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1690
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6810
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5534
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5184
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2310
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1949
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1234
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_549
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_119
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7591
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6467
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5029
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3928
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3207
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_563
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_526
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_133
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_370
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7015
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6683
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6028
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2183
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4863
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3754
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_331
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2573
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7963
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4327
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_330
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8082
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5440
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5070
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1140
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4735
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7988
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4362
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4003
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5706
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4820
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4367
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1406
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1760
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7730
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5390
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3984
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3282
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1090
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4473
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_754
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3203
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5690
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4890
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1390
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4955
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6418
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6068
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3957
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7454
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2762
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5128
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7962
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6981
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2481
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7775
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3423
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3053
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4337
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6817
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4234
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2317
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7929
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_582
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_152
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7077
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_717
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5483
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1183
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5810
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1510
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8188
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5419
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5049
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1119
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3308
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4750
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1929
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7003
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3223
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7923
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7427
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8183
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6716
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6346
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2216
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5004
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_991
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1878
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6942
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2442
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1792
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_740
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6237
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4277
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3947
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2671
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3684
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_705
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3500
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8030
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3140
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7360
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7295
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2667
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7064
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7029
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3689
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3578
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_926
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7177
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1940
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1749
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4802
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3965
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3404
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3034
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5223
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3482
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6962
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5679
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5224
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3852
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2718
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2462
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1379
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_666
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_216
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7547
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2812
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7645
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7414
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_842
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5995
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1695
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_805
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_61
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4627
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3185
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_25
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7109
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_561
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_524
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_131
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2571
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_89
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2844
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_788
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3352
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7516
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3325
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7462
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4046
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_972
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3354
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6681
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3393
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2923
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2181
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3715
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_859
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8033
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5987
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1687
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4214
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_195
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_34
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4471
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5894
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5859
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5597
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4861
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1594
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1559
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1297
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_290
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6025
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7236
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6740
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6370
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2240
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4330
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3747
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3612
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1964
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7568
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5851
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3742
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3597
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3311
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2953
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1551
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_537
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_107
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3317
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_588
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_158
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7682
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3251
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_644
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_609
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_80
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6408
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6058
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2653
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3744
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3357
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_42
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7146
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_255
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6013
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4887
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2851
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2610
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5813
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5453
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5083
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2987
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1513
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1153
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6449
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6099
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_438
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4794
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4759
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4497
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6783
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2283
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3128
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1782
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5673
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4375
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3292
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1373
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3210
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5750
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4511
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4141
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1450
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6868
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2368
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4556
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4186
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5755
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3296
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1455
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7980
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7293
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4974
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5412
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5042
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4926
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2753
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1112
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5360
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1060
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4693
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7021
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7643
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5498
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3119
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1198
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5782
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3442
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3072
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1482
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_989
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5979
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1679
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_572
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_142
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4291
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3707
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7688
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5934
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1634
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1986
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1745
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5775
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5589
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3574
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1743
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1475
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1289
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7830
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5634
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5544
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5264
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5194
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3632
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1334
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1244
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4573
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3850
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4650
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_530
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_100
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7943
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7906
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5635
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5265
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2783
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1704
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1335
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5630
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5260
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1330
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5838
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1805
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1538
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7100
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1796
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5675
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3480
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1705
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1375
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4539
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4169
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_471
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3485
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2832
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6589
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2089
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5465
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5095
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1165
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2686
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8072
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6546
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6176
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2046
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6217
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4682
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4879
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2688
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_954
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_379
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3812
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_917
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4834
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5561
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1261
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4945
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3535
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8065
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8028
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5828
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1528
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4125
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4943
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4489
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2775
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4444
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4094
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8127
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3414
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3193
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3044
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4641
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4536
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4166
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4049
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6497
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3924
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7464
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4530
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4160
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3783
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_296
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3355
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7441
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4996
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3459
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3089
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1825
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4575
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2921
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8110
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8157
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6919
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5528
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5178
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4006
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2419
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1228
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_318
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5951
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2746
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1651
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1921
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5201
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3312
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6112
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6525
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6155
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4461
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2025
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7439
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_39
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4909
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_940
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_642
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_620
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_607
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_199
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7089
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6847
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2347
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7780
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6444
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6094
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3314
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7004
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6454
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3745
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1908
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4283
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3704
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8075
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7198
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2899
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_962
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3701
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_905
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4798
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_874
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7345
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2658
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5322
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4851
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1022
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7223
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6403
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6053
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4705
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2615
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6664
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2164
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1737
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7262
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2591
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_275
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6406
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6056
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7226
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6788
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2288
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6745
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6489
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6375
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6011
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2245
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7715
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7612
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3626
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3622
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6447
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6097
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3677
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1800
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_434
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_353
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5918
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1618
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_546
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_509
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_116
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5874
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1574
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7672
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6048
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5667
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5297
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3256
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1367
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5710
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1410
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7387
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5367
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1067
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7945
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7908
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5211
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6760
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6390
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2260
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8177
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7486
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7655
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7091
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1832
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7308
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6005
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7982
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2554
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_719
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7757
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3635
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_476
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3262
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6471
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_890
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6896
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2396
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_777
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3961
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8190
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6503
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6133
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2003
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_730
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6839
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6615
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6265
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3855
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2339
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2115
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5318
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1018
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7318
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6222
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4405
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4055
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1862
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1700
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8020
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6658
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4128
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2158
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_348
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3237
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2630
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5717
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4010
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3134
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1417
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_385
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5767
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2904
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1467
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7368
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3696
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3652
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4906
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3829
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7733
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5616
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5246
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1316
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4900
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_422
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5842
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2887
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1542
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5137
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3177
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_391
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7023
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4780
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5985
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1685
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_901
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7778
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7738
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_865
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6804
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2304
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6709
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6339
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2209
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_320
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4490
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7772
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6879
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2379
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8077
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5665
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5595
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5295
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1365
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1295
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_889
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4791
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4756
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6704
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6334
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4633
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3702
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2204
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1817
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_828
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_888
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_356
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_997
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5450
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5080
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1150
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5862
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1818
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1562
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5622
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5252
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1912
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1322
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4245
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5326
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1026
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4885
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4561
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4191
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7874
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6944
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2444
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5624
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5254
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3527
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3215
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2941
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1324
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4880
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8009
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7836
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1735
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4495
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_288
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4390
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1944
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5312
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1012
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7363
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5495
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1195
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6693
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2193
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7838
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_702
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7310
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2787
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6966
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4763
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4226
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2466
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2975
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3371
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6821
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3761
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2729
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2321
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5640
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5270
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2814
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1340
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_927
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5359
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3230
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1059
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5381
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4931
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1081
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7832
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_980
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7507
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_322
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2548
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6551
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6181
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2051
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4686
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4016
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2505
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1753
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7871
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8046
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_650
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_613
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_200
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3322
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1710
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4321
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3995
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_520
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7541
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_762
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5683
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1383
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3367
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3827
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3275
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2836
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6510
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6140
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2010
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8083
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7158
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6326
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3411
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3041
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5768
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3878
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1468
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_727
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3456
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3086
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1852
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6631
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6596
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6281
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2131
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2096
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_389
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7328
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6737
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6367
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3874
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2237
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8158
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3826
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1853
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_851
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_760
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7137
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5709
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3980
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1409
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3412
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3042
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2878
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6633
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6283
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2133
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7204
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3593
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_816
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7084
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3457
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3087
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4368
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2564
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_725
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7528
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6871
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2371
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3209
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4108
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6111
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2529
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2521
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_97
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7171
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2766
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2699
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6524
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6154
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4204
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2024
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7933
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7584
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6676
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5798
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2176
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1498
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6015
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6674
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2174
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_345
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_308
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3439
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3069
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1885
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7972
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7434
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1932
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8022
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6242
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5489
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1189
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5864
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1564
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_41
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2523
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7578
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5446
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5076
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1146
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7935
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6639
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6289
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5117
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2139
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1788
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7221
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7212
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7875
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6484
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7974
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6580
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2080
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_898
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4293
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3541
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_479
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6578
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5509
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5397
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5159
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4221
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2078
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1209
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1097
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7501
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5114
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2583
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6533
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6163
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2033
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1848
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5825
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2933
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1525
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5819
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4936
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1519
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_921
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2916
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1934
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_554
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_519
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_124
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7901
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7477
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5350
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3809
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1050
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4566
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4266
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4196
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4110
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2873
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_845
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7889
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5747
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5743
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3450
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3080
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1447
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1443
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_663
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_628
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_213
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4269
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6908
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4224
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2408
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_843
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5354
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1054
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3452
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3183
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3082
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_69
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_24
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_382
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7863
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7828
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4720
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2684
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3698
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7320
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5681
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5028
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3865
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1381
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7573
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4216
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3564
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2961
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1751
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_808
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3605
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5564
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1264
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8162
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3757
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_806
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5306
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3243
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1006
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8126
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3820
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7822
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6979
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6926
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2479
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2426
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6970
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5347
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2470
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1047
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4250
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1892
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4619
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3712
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3497
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7131
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5731
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4643
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2884
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1431
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3495
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2998
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_813
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4616
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2607
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1828
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6114
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3943
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3822
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_941
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_781
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5954
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1654
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_906
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3200
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6527
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6157
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2027
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_189
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3914
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6935
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2721
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2435
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_870
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_593
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_163
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3286
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6562
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6192
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2914
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2062
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_623
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_252
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6708
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6338
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6125
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2208
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7376
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7789
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2597
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2566
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5518
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5168
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1218
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5403
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5033
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4232
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1103
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7781
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2590
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5515
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5165
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3970
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2849
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1215
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1857
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5122
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3305
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6122
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4307
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2984
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5558
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3971
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3028
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1258
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5125
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8185
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7746
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3383
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6537
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6167
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2037
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6863
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3773
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2363
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1971
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7999
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6834
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6434
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6084
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2334
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7483
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_93
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_90
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2805
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_741
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6008
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_706
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7500
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4275
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6041
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4116
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7299
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1987
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6477
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3935
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4523
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4441
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4153
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4091
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3997
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3680
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5908
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3489
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1608
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5884
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3859
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1584
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7676
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7057
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3936
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5704
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5700
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1404
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1400
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5609
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5239
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1309
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7996
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6910
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3390
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2410
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8145
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5778
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1478
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3446
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3076
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7690
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7649
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7353
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7315
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3816
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3691
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3656
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_300
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4408
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4058
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5604
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5234
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3533
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2829
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1865
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1304
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5770
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4013
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3647
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1470
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7723
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7396
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1991
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_840
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7283
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_792
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4486
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_912
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2778
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_803
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7977
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3272
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3145
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4831
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3461
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3091
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7407
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4784
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_802
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7766
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7336
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6827
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4600
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2327
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7130
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3780
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3867
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7633
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_317
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4789
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4678
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2840
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_857
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_424
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7706
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_38
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4040
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3290
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5552
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1252
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4582
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4437
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4087
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3616
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7881
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7787
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5554
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1254
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6324
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5593
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4952
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4827
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1293
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7233
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1887
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7073
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7036
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6202
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4748
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3553
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7374
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2894
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8014
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7423
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5942
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5511
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5161
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3831
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3585
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1642
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1211
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4373
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_364
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2947
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7938
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5948
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1648
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5451
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5081
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1151
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3771
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3586
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5905
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1605
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7842
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7807
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4452
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2940
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5944
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1644
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4454
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3381
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_352
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2713
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2587
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7744
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_657
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_207
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3221
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_678
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_228
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7420
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6994
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6959
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6697
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4625
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2972
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2494
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2459
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2197
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6718
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6348
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5328
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2218
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1028
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6303
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5364
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3903
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2864
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1064
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6951
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5410
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5040
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4842
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4697
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4411
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4061
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2451
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1110
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_310
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_265
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6711
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6341
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2211
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3630
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_835
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_287
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7319
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6756
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6386
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4417
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4067
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2256
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1981
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6699
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5496
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2974
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2199
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1196
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2674
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_446
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3108
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2626
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2857
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2780
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_443
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_408
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7864
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7829
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4844
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8104
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6893
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2393
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4024
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7492
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5319
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3682
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1019
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3268
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6491
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3857
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1809
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3814
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4529
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4159
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3149
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7940
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7903
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7510
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5606
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5236
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3487
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1820
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1306
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_665
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_215
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4656
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4228
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1954
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5832
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5011
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4261
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1532
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6773
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4392
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3444
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3074
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2273
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6850
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5424
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5054
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3104
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2350
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1124
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7031
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2937
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4876
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2939
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_690
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_240
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6739
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6369
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2239
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7542
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3602
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1946
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4219
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7103
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6882
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2382
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_793
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2579
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8112
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7156
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4807
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3191
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_497
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7324
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5384
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2534
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1084
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7070
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7033
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2645
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7361
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_196
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7193
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6689
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2643
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2189
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6644
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6294
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4893
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4732
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2144
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1902
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_946
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7731
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5614
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5393
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5244
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1314
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1093
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_589
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_159
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6841
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4950
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2341
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_313
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7526
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6735
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6365
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3983
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2235
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6730
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6360
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6245
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5983
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2230
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1683
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_482
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7660
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6938
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2438
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7102
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5659
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5289
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2696
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1359
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6775
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4580
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3137
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2605
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2275
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_858
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_485
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7985
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7844
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7809
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6565
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6195
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2065
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7172
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7776
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7585
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3885
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7140
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6531
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6161
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2031
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7883
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_254
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6987
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6661
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6018
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2487
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2161
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2929
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7165
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7128
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2609
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3975
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4703
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_437
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5516
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5166
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4514
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4144
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3169
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1216
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3124
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5123
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5559
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1259
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4559
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4189
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3620
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5901
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1601
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_567
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_137
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6998
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2498
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8108
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6576
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5759
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4799
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3946
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3116
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2551
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2076
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1459
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8052
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8017
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7535
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5714
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1414
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4306
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_886
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2821
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7685
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7298
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5493
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1193
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5826
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4349
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1526
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5876
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3519
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1576
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8031
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8036
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7948
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5456
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5086
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1156
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7640
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_895
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2808
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7947
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5000
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7563
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2743
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2589
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4801
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7984
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7648
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4989
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7249
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2637
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7410
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_470
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5835
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1535
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4299
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6906
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5462
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5092
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4611
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2406
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1162
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4722
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4681
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8143
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4777
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2868
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2700
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7207
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3132
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_545
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_508
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_115
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6767
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6397
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4356
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2267
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2574
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4649
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6605
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6311
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6255
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2105
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5022
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6328
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_944
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7277
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2732
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_174
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5437
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5067
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4256
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1137
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5331
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1031
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5763
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1463
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_612
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6210
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5734
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5334
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1434
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1034
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6684
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2184
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5896
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5479
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1905
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1596
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1179
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5434
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5064
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3171
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1134
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_909
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3596
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3175
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1729
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7812
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7290
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3016
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_187
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2600
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7627
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7120
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5377
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1077
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_996
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7242
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3341
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6980
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5374
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2480
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1074
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7060
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7025
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2988
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_643
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_608
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6867
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5809
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4340
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2367
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1509
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_272
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6690
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4796
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4752
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2190
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4606
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4960
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_412
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5949
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1649
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5906
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1606
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7959
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4929
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4027
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8114
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4590
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8165
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_652
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_615
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_202
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3386
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7710
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7460
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2901
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6445
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6095
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_687
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_237
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3731
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2585
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_284
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7340
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6761
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6391
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5823
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2261
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1523
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7303
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_56
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_13
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5727
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5415
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5045
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1427
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1115
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4383
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2580
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6765
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6695
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6395
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4319
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2970
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2265
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2195
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_19
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7565
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3967
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2717
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3337
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7419
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6550
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6180
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2050
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3727
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_772
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6722
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6352
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6031
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4992
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2222
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8151
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8133
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4981
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2968
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_64
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6426
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6076
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_697
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_281
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_247
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3999
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_735
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7598
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5102
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3648
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7069
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7994
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6724
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6354
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4315
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2224
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1994
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_543
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_506
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_113
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2635
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2631
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7697
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7188
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6030
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3273
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_958
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4009
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6425
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6075
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4949
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7018
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5651
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5281
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4123
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1351
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6412
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6062
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6595
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2095
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7405
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2924
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_694
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_244
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7558
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4579
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5523
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5173
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1813
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1223
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3666
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7042
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5765
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1465
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7327
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6117
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1895
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3525
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3521
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5206
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5132
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_969
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7553
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7322
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5618
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5248
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1318
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7989
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7793
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6459
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5568
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3018
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1966
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1268
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_392
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7966
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5203
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1727
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6481
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5611
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5241
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1311
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_395
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5696
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5656
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5286
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1396
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1356
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5599
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1299
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7924
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1774
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1726
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7007
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1957
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1880
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5612
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5242
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1312
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_86
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_83
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5793
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2796
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1721
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1493
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7625
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5657
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5287
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1357
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5724
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1424
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4422
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4072
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7195
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7055
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2850
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_967
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_357
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3429
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3059
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_860
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4031
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1815
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_48
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3556
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4467
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3161
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_823
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4927
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7183
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6404
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6054
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3026
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4978
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3776
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2752
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3331
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_564
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_527
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_134
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7061
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7026
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3437
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3067
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7258
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7686
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6809
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5639
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5269
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2309
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1339
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4512
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4142
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3333
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4557
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4187
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8003
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7411
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3764
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8056
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7275
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2935
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7641
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7457
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4713
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4769
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3571
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4309
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3142
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2788
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8093
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3906
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3793
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3721
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2930
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_477
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7608
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6493
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5741
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1441
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6898
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3376
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2398
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5145
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8002
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3374
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_981
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_323
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2785
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7122
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6964
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2464
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3723
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6727
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6357
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2227
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8040
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5431
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5061
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1131
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_764
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5887
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3645
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3101
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1587
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3280
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1709
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3270
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6314
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4675
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3187
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_456
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_419
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4534
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4164
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3603
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6215
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_171
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6609
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6259
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6023
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3969
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3278
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2109
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8091
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4904
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_729
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6214
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_789
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3233
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_297
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2748
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7369
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6925
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5956
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5898
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2425
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1656
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1598
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6416
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6066
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5476
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3699
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1176
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3206
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5443
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5073
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2834
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1143
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7291
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5958
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1658
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1850
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4462
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3249
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7739
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5521
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5171
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1221
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6450
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5566
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1266
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5913
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1766
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1613
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_875
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6843
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5130
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4550
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4180
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2343
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3608
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8102
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4552
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4182
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5989
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1843
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1689
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3889
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6781
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6128
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4965
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4428
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4078
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2281
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4852
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4664
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2651
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8149
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5400
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5030
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1100
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4857
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4343
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5486
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4101
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3199
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1186
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5806
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4920
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3511
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1506
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3679
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3581
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_936
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_493
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3196
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2792
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1968
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_984
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8107
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4812
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4597
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7610
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6831
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2331
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6432
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6082
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4595
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5974
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1870
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1674
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3549
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7469
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5505
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5155
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3807
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2728
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1205
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8006
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5228
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4922
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7653
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5112
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3156
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4222
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_704
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5110
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4300
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7896
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4354
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3546
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5584
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3921
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1284
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4386
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3728
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3153
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3408
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3038
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4818
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3797
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3766
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6618
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6475
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6268
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2118
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4313
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7248
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_602
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4267
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2757
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_778
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4399
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6225
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3338
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1835
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_847
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8142
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8066
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8029
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7285
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4483
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_800
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5880
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3537
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1580
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_977
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7095
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7678
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5689
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4873
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2871
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1389
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1759
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3240
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3600
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8043
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7630
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7260
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5590
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3693
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3658
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1290
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3506
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5646
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5276
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3860
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1346
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1716
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7854
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7817
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7635
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5847
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1547
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3490
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7891
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7859
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_945
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7445
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5472
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5345
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1172
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1045
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7856
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7819
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5661
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5291
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4589
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2508
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1361
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7893
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6984
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4959
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4617
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2484
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6800
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2300
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5980
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4729
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3283
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1680
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_557
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_127
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3610
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7245
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6878
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2378
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5911
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4546
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4176
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3219
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1611
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4916
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_339
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6019
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2765
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6870
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4747
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2370
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_596
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_166
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6240
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2891
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_756
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6637
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6287
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4516
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4146
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3583
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2137
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5816
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1516
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3978
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3474
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2527
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_260
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3892
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3551
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_344
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_307
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4372
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4037
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3881
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3216
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_469
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3931
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3257
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7802
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7280
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5753
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1453
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_669
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_219
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7673
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4967
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_744
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5785
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1731
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1485
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8088
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7790
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_631
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5507
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5157
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1207
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_566
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_529
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_136
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5325
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3849
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1025
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_742
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1917
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_673
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_636
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_223
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6954
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2454
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7112
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6652
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3023
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2152
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7065
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5582
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4716
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3844
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1282
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7582
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6654
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5972
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2154
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1672
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_709
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4762
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3479
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3024
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3901
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3503
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_707
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5017
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6825
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2325
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3228
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4653
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_378
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7415
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7495
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7114
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1803
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6611
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6261
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5839
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4685
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2542
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2111
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1539
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7450
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5830
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1530
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_732
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5466
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5096
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4871
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1166
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7493
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2869
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2544
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_381
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1896
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_293
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2824
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5882
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4481
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1582
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_63
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7189
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_258
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8124
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8095
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1757
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1950
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7695
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6033
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1714
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_522
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5687
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1387
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6856
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6428
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6078
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4540
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4170
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2356
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6461
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_173
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7910
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7559
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6464
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6410
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6060
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5644
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5274
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1344
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_876
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7481
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3651
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5304
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1004
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4730
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6732
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6362
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2881
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2232
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2993
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2958
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6118
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4208
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4953
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6321
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5802
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1502
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_440
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_405
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6777
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2277
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6419
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6069
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4782
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8175
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5391
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4957
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4910
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1091
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2709
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4914
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3613
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6457
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4249
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3669
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4207
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6706
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6336
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4587
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4583
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2720
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2206
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1888
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2854
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2706
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6932
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5372
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2593
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2432
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1909
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1072
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_866
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4544
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4248
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4174
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7452
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_44
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5337
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1037
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7846
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4702
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2846
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3933
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7885
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5627
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5257
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2980
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1785
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1327
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_829
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7382
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7139
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6807
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2307
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3300
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3345
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5214
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3735
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3575
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3434
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3064
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2802
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7752
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6714
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6344
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2214
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5115
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1791
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2769
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3804
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3435
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3065
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7797
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_830
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3638
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6759
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6389
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2259
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4237
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3805
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_285
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6999
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5316
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2499
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1016
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3265
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7358
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7509
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6506
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6136
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4985
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4017
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2006
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_703
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4988
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8191
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6549
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6179
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3362
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2049
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7506
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_79
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1900
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_698
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_248
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_325
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6616
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6518
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6266
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6148
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2116
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2018
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6223
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4297
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6659
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2159
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3925
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2501
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1952
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6103
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7312
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3328
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7208
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6859
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3752
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2359
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3786
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7728
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7152
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7117
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6559
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6189
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2059
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6814
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2314
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6888
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2388
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3001
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7914
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6811
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6593
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2311
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2093
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_73
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_70
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6881
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2381
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7522
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_544
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_507
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_114
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6976
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2476
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_76
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3396
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7136
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6026
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4647
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5332
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1032
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6556
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6186
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2056
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2773
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4254
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2647
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6100
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2950
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2695
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_531
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_101
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4919
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3122
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2602
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_536
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_106
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3837
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3254
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5795
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1495
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5865
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1565
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7920
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6247
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_183
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8078
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5722
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1422
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6204
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7243
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4740
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2738
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4502
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4132
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3718
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_186
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5375
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1075
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7615
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4549
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4179
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3213
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_347
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8148
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3467
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3097
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_47
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3167
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3011
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2943
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1882
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_933
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3299
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8167
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7878
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6431
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6081
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3778
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7658
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3733
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7998
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_578
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_148
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7804
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3388
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8160
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6996
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6579
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2496
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2079
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6534
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6164
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4271
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3343
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2034
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7652
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_923
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_839
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4696
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6793
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2293
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6227
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2629
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1935
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2663
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8057
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_571
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_141
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4415
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4065
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4022
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3962
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4458
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3360
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_892
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7601
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6474
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7769
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3517
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_844
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7867
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6909
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4980
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3567
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2409
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7399
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3629
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_640
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_605
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7951
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7916
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5143
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5107
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7010
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2549
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1867
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2506
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_849
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8070
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7214
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5140
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2965
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_779
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_384
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7265
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5537
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5187
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5100
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3416
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3046
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1237
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7886
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5432
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5062
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1132
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_807
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7059
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4772
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5927
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1627
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2681
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7726
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6923
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2423
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7097
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3750
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2885
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2731
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8180
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6515
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6145
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4604
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2015
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7409
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4509
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4139
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_316
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7337
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4043
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_966
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3465
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3095
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5477
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1177
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_724
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3917
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_428
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_393
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5854
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1554
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8012
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7707
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7447
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4000
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7162
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7125
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3250
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3979
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3662
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7372
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3422
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3052
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7251
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_787
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7371
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8115
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5725
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1425
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7742
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7532
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_821
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7356
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3424
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3194
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3054
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5218
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1845
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7847
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3835
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_820
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7741
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7078
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7228
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1972
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_358
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7749
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7255
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7713
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6751
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6381
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2251
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1969
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3112
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3295
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1924
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5807
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1507
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7379
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8089
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6623
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6273
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2123
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_460
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7605
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7531
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4766
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_351
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6865
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2365
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7428
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_463
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6860
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6235
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2795
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2360
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4621
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2661
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6306
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6232
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5313
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3544
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1013
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7306
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5756
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3440
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3070
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1456
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6668
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6626
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6276
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5361
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4118
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3159
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3151
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2866
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2168
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2126
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1061
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5310
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2627
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1010
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8152
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3181
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7484
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6791
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2291
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6796
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5632
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5262
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2296
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1332
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_335
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4848
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5018
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_425
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7218
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4805
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3853
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6712
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6342
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2212
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5221
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2621
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5677
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1377
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6757
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6387
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2257
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7458
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6824
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2324
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6581
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3810
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2081
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6969
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5357
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2469
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1057
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6036
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3107
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5342
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3483
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2715
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1042
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7785
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1806
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5993
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1693
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3148
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_280
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7784
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4126
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2908
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3952
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4431
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4081
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4537
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4167
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7343
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3509
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_950
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2693
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4433
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4083
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3244
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_481
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6029
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_913
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7161
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7124
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4864
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_970
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_693
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_243
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_193
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8039
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8038
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5845
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5707
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5301
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1545
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1407
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1001
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_853
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4671
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_818
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5470
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4242
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1170
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7987
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5387
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1087
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4821
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3201
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_374
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4324
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1869
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4476
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3598
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2992
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2957
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_442
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_407
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3287
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4474
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7928
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7561
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7220
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3985
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4336
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5899
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1599
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_586
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_156
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3664
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4823
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_647
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2839
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8170
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5406
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5036
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1106
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7774
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3888
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7346
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2893
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4284
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6662
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5449
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5079
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4745
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4201
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2162
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1915
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1149
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7922
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4380
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4235
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4370
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4882
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4287
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7716
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5418
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5048
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1118
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4977
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4378
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3309
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3197
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7191
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1928
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7961
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4969
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4333
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4924
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3948
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_501
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5003
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3625
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2556
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7590
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2710
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4492
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2552
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_180
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7504
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4599
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5459
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5089
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4554
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4278
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4184
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3617
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1159
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_630
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7431
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6543
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6173
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5788
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2043
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1488
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7589
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7309
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2558
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5711
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2750
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1411
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5781
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3501
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1481
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7068
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6621
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6271
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5396
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2121
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1096
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7296
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6666
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2166
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2666
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2516
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2513
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5638
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5268
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1338
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6230
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3547
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2856
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4708
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_682
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_232
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1873
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_928
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7176
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5532
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5182
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3154
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1747
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1232
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7202
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3683
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_575
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_145
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4571
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1795
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7646
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3819
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3481
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_601
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6911
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3851
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2411
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1702
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7418
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6961
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6500
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6130
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2461
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2000
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7823
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6554
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6184
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2054
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7513
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5746
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1446
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7546
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6586
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5147
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2906
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2086
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7081
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2876
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5928
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5353
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5104
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4779
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1628
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1053
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_911
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4296
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3640
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1838
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_294
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7474
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3402
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3032
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4628
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_26
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6105
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5575
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1275
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4941
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3531
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_473
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_455
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_418
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6513
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6143
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3449
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3079
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2013
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2770
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5141
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4907
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7106
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5922
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1622
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_679
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_229
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6599
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2099
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5538
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5207
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5188
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1238
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_87
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6212
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5737
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1437
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_974
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1708
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_656
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_619
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_206
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2954
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_259
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7134
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4646
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3873
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5800
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1500
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5893
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5858
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1593
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1558
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4828
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4253
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7794
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4508
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4138
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5693
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1963
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1393
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_850
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4897
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4866
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5127
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3318
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_250
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1763
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_512
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3315
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4041
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_661
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_626
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_211
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3358
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_815
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4438
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4088
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2735
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_81
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7166
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7129
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6986
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4637
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2486
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6789
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4663
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2289
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_43
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7576
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4634
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3129
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2659
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3880
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6929
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4700
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2429
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7143
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4793
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4758
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_964
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6746
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6376
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2246
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2616
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7650
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7536
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_492
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6947
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2447
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5783
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1483
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3672
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5674
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1374
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5751
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2902
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1451
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6572
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2072
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1781
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_670
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_633
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_220
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5416
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5046
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1116
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_266
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5001
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3708
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5457
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5087
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1985
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1831
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1157
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_177
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3504
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4029
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3631
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3409
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3039
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_57
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_14
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4710
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2511
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5227
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_795
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7831
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7471
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3570
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7942
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7905
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4683
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2546
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6916
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2416
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1744
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8062
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8025
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4574
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2779
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4651
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1801
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5703
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1403
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4316
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2831
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2969
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6218
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4357
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5837
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5428
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5058
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1537
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1128
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6853
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6656
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2353
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2156
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6220
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5965
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2687
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1665
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_794
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6885
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5464
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5094
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2385
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1164
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8064
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8027
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6607
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6257
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2107
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7487
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8128
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3927
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2817
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_765
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8155
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7571
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7964
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6682
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4944
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2182
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2572
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4124
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_298
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4603
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3987
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4360
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4002
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7623
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5760
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5135
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1460
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1761
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4733
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4328
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1907
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5526
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5176
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1226
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2703
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6939
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2439
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5691
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1391
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6930
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2430
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3748
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8118
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7668
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6566
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6196
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2066
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7442
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3705
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7005
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7662
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6982
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4797
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2482
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7224
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5481
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2657
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1181
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_935
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2614
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5869
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1569
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_411
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6407
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6057
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7263
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6787
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2287
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_410
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6012
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4518
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4148
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7349
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6744
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6448
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6374
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6098
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4103
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3164
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2244
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7613
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4751
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7714
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4975
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4499
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7835
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7002
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3255
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1793
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_746
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7799
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6902
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2402
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_701
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7092
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1833
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7719
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7384
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7307
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2978
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8178
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8061
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8024
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7656
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7040
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3909
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_499
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5500
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5150
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3577
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1200
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7273
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7063
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7047
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7028
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5545
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5195
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3920
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3406
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3036
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1245
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5935
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1635
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6472
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3964
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2809
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_893
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3224
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7754
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6437
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6087
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5015
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8120
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2964
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6613
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6263
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3236
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2113
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6001
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7413
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2503
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1939
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2685
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_459
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4838
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1993
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3184
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5562
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1262
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4400
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4050
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3135
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4445
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4095
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4835
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3782
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7344
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3877
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2691
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5139
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4403
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4053
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4535
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4165
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4045
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3869
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4738
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4448
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4098
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3824
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2922
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4905
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_591
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_161
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3353
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1810
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5952
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3392
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1652
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5986
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4365
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3499
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1686
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3454
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3178
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3084
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_368
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7967
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3870
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3138
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_949
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6741
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6371
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4331
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2241
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_810
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4787
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6743
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6373
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2243
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_396
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5916
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2800
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1616
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8073
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5596
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1296
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1956
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3743
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3316
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_552
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_517
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_122
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2654
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6873
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4039
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2373
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8076
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6672
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2172
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3359
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3310
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2562
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3471
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2852
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5320
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2619
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2611
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1020
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5811
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4376
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3559
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1511
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4886
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4881
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5861
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1561
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6786
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5454
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5084
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3514
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2286
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1154
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4338
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6784
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2284
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_450
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_413
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7837
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3293
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1976
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_743
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_496
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6940
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3214
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2440
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_999
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6702
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6332
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2202
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3676
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3528
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5005
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4496
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2613
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4491
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3841
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_881
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6749
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6379
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5413
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5043
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2249
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1113
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7020
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4889
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7617
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5499
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2976
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2723
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1199
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7930
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_708
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5978
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5494
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5365
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1678
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1194
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1065
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5933
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1633
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8034
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4937
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6895
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2395
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6965
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5588
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2465
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1288
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_420
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7870
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7178
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6822
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4706
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2322
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5543
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5193
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1243
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6044
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7583
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7540
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_985
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_982
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4567
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4197
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7548
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4874
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4111
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2782
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_341
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_304
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5560
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1260
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7979
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5886
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1586
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7286
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7267
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4878
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3131
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7679
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3563
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4833
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3534
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7671
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2680
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5829
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4488
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4484
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1529
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3415
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3279
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3045
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4443
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4093
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3234
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_722
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7463
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7636
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3990
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2835
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7157
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3000
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4329
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6972
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2472
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_539
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_109
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4460
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7478
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3174
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5408
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5038
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1108
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5950
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1650
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4667
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3609
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7527
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6243
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2560
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_98
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6207
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7580
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3749
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2767
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7085
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3706
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_751
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7170
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6670
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2912
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2170
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6200
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6016
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5946
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2760
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1646
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6532
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6162
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2032
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_184
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_326
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3700
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1879
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_714
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2656
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1931
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7435
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7225
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7075
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7038
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5118
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3623
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7577
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5625
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5255
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4850
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1325
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2810
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5556
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5394
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5212
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1256
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1094
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_897
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5120
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1787
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5668
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5298
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1368
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_579
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_149
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_655
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_618
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_205
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6047
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7602
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4565
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4195
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_659
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_209
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8007
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6577
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2077
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5715
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1415
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6004
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7425
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4350
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_831
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5824
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1524
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4522
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4152
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4768
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3260
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7215
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5744
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3792
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3633
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1444
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4524
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4294
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4154
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_574
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_144
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6318
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5351
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1051
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2745
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_774
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4935
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_737
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4225
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1997
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6037
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2872
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_66
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_21
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3451
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3081
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4212
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4395
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8044
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6907
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3697
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2407
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_692
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_242
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3913
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3323
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_848
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5766
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3565
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2962
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1466
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_27
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_548
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_118
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3955
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6887
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5307
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2387
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1007
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_319
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8163
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6413
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6063
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4644
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3006
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3418
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3242
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3048
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2888
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4259
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4251
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3368
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5348
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3003
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1048
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7252
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4281
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7734
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7043
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3875
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3496
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_31
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3399
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2772
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2842
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_400
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5444
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5074
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4896
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4868
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1144
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_943
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3821
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_908
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_427
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4825
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7779
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6020
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3524
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8146
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7008
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4478
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4435
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4085
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7620
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7087
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8173
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7773
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6442
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6092
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3915
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3285
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7971
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7700
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5401
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5031
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1101
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2737
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1816
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8101
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2910
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_271
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5126
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7330
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7030
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5487
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1187
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7665
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4450
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7437
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6121
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_581
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_151
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4609
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6536
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6166
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5513
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5163
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2036
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1213
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4344
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8084
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7301
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5903
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1603
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3738
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1738
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7138
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6945
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6401
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6051
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2445
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_541
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_504
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_111
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7932
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6435
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6085
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4562
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4192
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_91
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6570
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2070
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_686
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_671
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_634
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_236
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_221
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7432
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6487
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4564
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4194
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2582
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4301
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_462
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_94
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4691
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2677
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_748
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_570
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_140
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3303
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4698
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7364
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2669
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4387
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_354
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6042
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5311
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3348
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2624
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1011
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6692
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2192
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6799
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5909
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4932
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4764
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4521
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4151
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2299
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1609
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6899
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6754
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6478
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6384
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5817
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4840
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2399
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2254
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1517
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7270
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4527
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4157
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5641
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5271
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3231
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1341
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8138
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7508
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_535
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_105
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5701
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5380
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3687
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2815
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1401
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1080
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2786
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5643
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5273
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4934
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1343
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4114
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4015
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1990
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1754
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_329
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7082
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5773
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4409
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4059
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1473
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7900
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7475
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5572
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5358
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2828
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1272
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1058
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5883
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4014
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1583
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7592
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5962
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1662
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7995
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6771
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2271
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4725
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3756
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1719
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1711
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_562
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_525
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_132
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3276
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3781
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4717
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5686
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1386
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_951
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3646
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3238
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5684
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3758
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3271
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2749
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1384
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3950
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4601
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6496
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5840
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3321
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1540
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5602
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5232
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3366
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1302
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_721
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6828
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3866
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3713
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2328
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6738
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6368
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2238
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1713
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_971
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7329
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3391
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2641
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1851
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_914
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5708
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5649
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5279
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1408
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1349
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7234
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6632
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6282
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2132
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4783
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3789
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1823
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4581
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4951
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3615
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7704
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_362
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_514
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6846
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2346
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1773
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3883
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3606
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6453
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2528
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7934
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6675
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2175
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4631
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7973
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3774
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7465
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6241
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2522
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6638
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6307
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6288
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2138
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6837
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2337
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8186
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6482
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2608
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5519
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5329
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5169
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1219
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1029
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4973
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1780
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6900
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3384
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2400
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8086
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6993
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6958
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2493
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2458
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8130
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5119
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3226
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2863
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2790
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_988
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4418
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4068
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3229
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5872
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3143
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2932
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1572
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2915
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_380
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4025
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3898
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7334
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7148
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4229
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_600
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7902
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6229
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5831
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1531
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_289
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7888
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7724
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7670
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3102
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7397
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5960
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5605
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5235
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1660
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1305
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_979
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4019
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7865
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1953
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_343
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_306
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3188
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7032
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5570
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1270
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7321
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6883
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2383
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1860
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7767
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6774
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2274
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_489
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7862
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7827
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6851
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2351
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4215
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7518
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7101
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6516
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6146
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2016
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1756
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8125
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8096
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7821
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7761
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6101
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3601
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4808
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7550
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6557
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6187
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2057
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1910
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4731
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5730
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1430
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_480
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3711
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1764
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6327
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_441
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_406
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5853
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1827
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1553
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4670
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2644
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3538
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2701
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_511
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6803
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3668
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2303
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5694
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1394
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7849
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6560
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6190
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2060
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3584
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_948
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_277
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7377
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7169
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6937
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6933
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6528
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6158
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2437
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2433
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2028
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7391
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_867
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2565
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6564
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6194
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2064
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_862
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7354
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7164
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7127
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3307
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3125
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_825
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6992
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6957
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_4754
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2492
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2457
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3382
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_500
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8184
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7747
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6832
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3772
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2332
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6997
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2497
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7539
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6862
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2362
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_938
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_992
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7534
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7595
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2755
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5787
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1487
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2807
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2803
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7180
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1988
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6006
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3639
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_334
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2675
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1872
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1942
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_604
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8035
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3266
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_558
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_128
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5455
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5085
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1155
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7946
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7909
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5108
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3796
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3768
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3996
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3725
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_7983
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6591
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2091
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_178
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2827
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_8129
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3378
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1901
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3400
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3335
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3030
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_5777
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_1477
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3447
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_3077
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6728
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6640
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6358
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_6290
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2228
+^[0-9a-f]+ [0-9a-f]+ R_MIPS_REL32 [0-9a-f]+ sym_2_2140
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s b/binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-no-shared-1.s
new file mode 100644
index 00000000..a2eee849
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/multi-got-no-shared-2.s b/binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-no-shared-2.s
new file mode 100644
index 00000000..1de7a140
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/multi-got-no-shared.d b/binutils-2.17/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
new file mode 100644
index 00000000..927b3040
--- /dev/null
+++ b/binutils-2.17/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 <[^>]*> 3c1c0046 lui gp,0x46
+004000b4 <[^>]*> 279c9ff0 addiu gp,gp,-24592
+004000b8 <[^>]*> afbc0008 sw gp,8\(sp\)
+#...
+00408d60 <[^>]*> 3c1c0047 lui gp,0x47
+00408d64 <[^>]*> 279cb960 addiu gp,gp,-18080
+00408d68 <[^>]*> afbc0008 sw gp,8\(sp\)
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/region1.d b/binutils-2.17/ld/testsuite/ld-mips-elf/region1.d
new file mode 100644
index 00000000..4e65f531
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/region1.t b/binutils-2.17/ld/testsuite/ld-mips-elf/region1.t
new file mode 100644
index 00000000..13077abe
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/region1a.s b/binutils-2.17/ld/testsuite/ld-mips-elf/region1a.s
new file mode 100644
index 00000000..715a9860
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/region1a.s
@@ -0,0 +1,3 @@
+ .text
+ .global foo
+foo: .4byte 1
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/region1b.s b/binutils-2.17/ld/testsuite/ld-mips-elf/region1b.s
new file mode 100644
index 00000000..9a72c965
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/region1b.s
@@ -0,0 +1,2 @@
+ .data
+ .4byte foo
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/rel32-n32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/rel32-n32.d
new file mode 100644
index 00000000..c071c017
--- /dev/null
+++ b/binutils-2.17/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 5 -r
+#ld: -shared -melf32btsmipn32
+
+Relocation section '.rel.dyn' at offset .* contains 2 entries:
+ Offset Info Type Sym.Value Sym. Name
+00000000 00000000 R_MIPS_NONE
+000002d0 00000003 R_MIPS_REL32
+
+Hex dump of section '.text':
+ 0x000002c0 00000000 00000000 00000000 00000000 ................
+ 0x000002d0 000002d0 00000000 00000000 00000000 ................
+ 0x000002e0 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/rel32-o32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/rel32-o32.d
new file mode 100644
index 00000000..d98bf211
--- /dev/null
+++ b/binutils-2.17/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 6 -r
+#ld: -shared -melf32btsmip
+
+Relocation section '.rel.dyn' at offset .* contains 2 entries:
+ Offset Info Type Sym.Value Sym. Name
+00000000 00000000 R_MIPS_NONE
+000002f0 00000003 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.17/ld/testsuite/ld-mips-elf/rel32.s b/binutils-2.17/ld/testsuite/ld-mips-elf/rel32.s
new file mode 100644
index 00000000..dad4670f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/rel32.s
@@ -0,0 +1,4 @@
+ .space 16
+.Lfoo:
+ .word .Lfoo
+ .space 16
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/rel64.d b/binutils-2.17/ld/testsuite/ld-mips-elf/rel64.d
new file mode 100644
index 00000000..61fbf879
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/rel64.d
@@ -0,0 +1,19 @@
+#name: MIPS rel64 n64
+#source: rel64.s
+#as: -KPIC -EB -64
+#readelf: -x 6 -r
+#ld: -shared -melf64btsmip
+
+Relocation section '.rel.dyn' at offset .* contains 2 entries:
+ Offset Info Type Sym. Value Sym. Name
+000000000000 000000000000 R_MIPS_NONE
+ Type2: R_MIPS_NONE
+ Type3: R_MIPS_NONE
+000000000450 000000001203 R_MIPS_REL32
+ Type2: R_MIPS_64
+ Type3: R_MIPS_NONE
+
+Hex dump of section '.text':
+ 0x00000440 00000000 00000000 00000000 00000000 ................
+ 0x00000450 00000000 00000450 00000000 00000000 ................
+ 0x00000460 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/rel64.s b/binutils-2.17/ld/testsuite/ld-mips-elf/rel64.s
new file mode 100644
index 00000000..3971eb8c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/rel64.s
@@ -0,0 +1,4 @@
+ .space 16
+.Lfoo:
+ .dword .Lfoo
+ .space 16
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n32-shared.d b/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n32-shared.d
new file mode 100644
index 00000000..8753ba45
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n32-shared.d
@@ -0,0 +1,25 @@
+#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
+ \.\.\.
+Disassembly of section \.MIPS\.stubs:
+ \.\.\.
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n32.d
new file mode 100644
index 00000000..2478b521
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/relax-jalr-n64-shared.d b/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n64-shared.d
new file mode 100644
index 00000000..47936d29
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n64-shared.d
@@ -0,0 +1,25 @@
+#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
+ \.\.\.
+Disassembly of section \.MIPS\.stubs:
+ \.\.\.
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n64.d b/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr-n64.d
new file mode 100644
index 00000000..9e169747
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/relax-jalr.s b/binutils-2.17/ld/testsuite/ld-mips-elf/relax-jalr.s
new file mode 100644
index 00000000..ba7ea1a0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-1-n32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1-n32.d
new file mode 100644
index 00000000..dd41822d
--- /dev/null
+++ b/binutils-2.17/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 \+ ffff7ff0
+.* R_MIPS_LO16 .* \.text \+ ffff7ff0
+.* R_MIPS_HI16 .* \.text \+ ffff8000
+.* R_MIPS_LO16 .* \.text \+ ffff8000
+.* 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 \+ ffff8010
+.* R_MIPS_LO16 .* \.text \+ ffff8010
+.* R_MIPS_HI16 .* \.text \+ ffff8020
+.* R_MIPS_LO16 .* \.text \+ ffff8020
+.* 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 \+ ffff7ff0
+.* R_MIPS_LO16 .* _start \+ ffff7ff0
+.* R_MIPS_HI16 .* _start \+ ffff8000
+.* R_MIPS_LO16 .* _start \+ ffff8000
+.* 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 \+ ffff7ff0
+.* R_MIPS_LO16 .* \.text \+ ffff7ff0
+.* R_MIPS_GOT16 .* \.text \+ ffff8000
+.* R_MIPS_LO16 .* \.text \+ ffff8000
+.* 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 \+ ffff8010
+.* R_MIPS_LO16 .* \.text \+ ffff8010
+.* R_MIPS_GOT16 .* \.text \+ ffff8020
+.* R_MIPS_LO16 .* \.text \+ ffff8020
+.* 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 \+ fffffffc
+.* 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 \+ ffff801c
+.* R_MIPS_GPREL16 .* \.sdata \+ ffff8020
+.* R_MIPS_GPREL16 .* \.sdata \+ ffff8024
+#
+# Relocations against tstarta
+#
+.* R_MIPS_26 .* \.text \+ fffffffc
+.* 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 \+ fffffffc
+.* 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 \+ ffff7ff0
+.* R_MIPS_LO16 .* _start \+ ffff7ff0
+.* R_MIPS_HI16 .* _start \+ ffff8000
+.* R_MIPS_LO16 .* _start \+ ffff8000
+.* 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 \+ fffffffc
+.* R_MIPS_GPREL16 .* sdg \+ 0
+.* R_MIPS_GPREL16 .* sdg \+ 4
+#
+# Relocations against sdlb
+#
+.* R_MIPS_GPREL16 .* \.sdata \+ ffff803c
+.* R_MIPS_GPREL16 .* \.sdata \+ ffff8040
+.* R_MIPS_GPREL16 .* \.sdata \+ ffff8044
+#
+# 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 \+ fffffffc
+.* R_MIPS_26 .* _start \+ 0
+.* R_MIPS_26 .* _start \+ 4
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1-n64.d b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1-n64.d
new file mode 100644
index 00000000..2db8fca6
--- /dev/null
+++ b/binutils-2.17/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 \+ ffff7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ ffff7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ ffff8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ ffff8000
+.* 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 \+ ffff8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ ffff8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* \.text \+ ffff8020
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ ffff8020
+.* 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 \+ ffff7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ ffff7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \+ ffff8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ ffff8000
+.* 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 \+ ffff7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ ffff7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ ffff8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ ffff8000
+.* 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 \+ ffff8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ ffff8010
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GOT16 .* \.text \+ ffff8020
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* \.text \+ ffff8020
+.* 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 \+ fffffffc
+.* 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 \+ ffff801c
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* \.sdata \+ ffff8020
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* \.sdata \+ ffff8024
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+#
+# Relocations against tstarta
+#
+.* R_MIPS_26 .* \.text \+ fffffffc
+.* 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 \+ fffffffc
+.* 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 \+ ffff7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ ffff7ff0
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_HI16 .* _start \+ ffff8000
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_LO16 .* _start \+ ffff8000
+.* 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 \+ fffffffc
+.* 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 \+ ffff803c
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* \.sdata \+ ffff8040
+.* R_MIPS_NONE *
+.* R_MIPS_NONE *
+.* R_MIPS_GPREL16 .* \.sdata \+ ffff8044
+.* 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 \+ fffffffc
+.* 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.17/ld/testsuite/ld-mips-elf/reloc-1-rel.d b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1-rel.d
new file mode 100644
index 00000000..e37da1e5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-1a.s b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1a.s
new file mode 100644
index 00000000..5fcd4bb1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-1b.s b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-1b.s
new file mode 100644
index 00000000..8b9544ce
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-2.d b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-2.d
new file mode 100644
index 00000000..740211ea
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-2.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-2.ld
new file mode 100644
index 00000000..ff0b2916
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-2a.s b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-2a.s
new file mode 100644
index 00000000..0ea830a9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-2b.s b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-2b.s
new file mode 100644
index 00000000..3a9d6940
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-merge-lo16.d b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-merge-lo16.d
new file mode 100644
index 00000000..7cb3cfef
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-merge-lo16.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-merge-lo16.ld
new file mode 100644
index 00000000..4d487dd5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/reloc-merge-lo16.s b/binutils-2.17/ld/testsuite/ld-mips-elf/reloc-merge-lo16.s
new file mode 100644
index 00000000..33158b12
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d b/binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-10000.d
new file mode 100644
index 00000000..b59bb5fb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d b/binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-2fe80.d
new file mode 100644
index 00000000..07ca1a2b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d b/binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-7fff.d
new file mode 100644
index 00000000..bfc94c5a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d b/binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-8000.d
new file mode 100644
index 00000000..2861ac22
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d b/binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1-fff0.d
new file mode 100644
index 00000000..440d32a9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1.ld
new file mode 100644
index 00000000..17c998df
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/stub-dynsym-1.s b/binutils-2.17/ld/testsuite/ld-mips-elf/stub-dynsym-1.s
new file mode 100644
index 00000000..15d2e1b8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/textrel-1.d b/binutils-2.17/ld/testsuite/ld-mips-elf/textrel-1.d
new file mode 100644
index 00000000..7172bb7e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/textrel-1.d
@@ -0,0 +1,26 @@
+#name: MIPS textrel-1
+#source: textrel-1.s
+#as: -EB -n32
+#ld: -shared -melf32btsmipn32
+#readelf: -d
+
+Dynamic section at offset 0xb4 contains 18 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\)
+ 0x00000015 \(DEBUG\) 0x0
+ 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.17/ld/testsuite/ld-mips-elf/textrel-1.s b/binutils-2.17/ld/testsuite/ld-mips-elf/textrel-1.s
new file mode 100644
index 00000000..f6b4a6a7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tls-hidden2-got.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2-got.d
new file mode 100644
index 00000000..69c09829
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2-got.d
@@ -0,0 +1,6 @@
+
+.*file format.*
+
+Contents of section \.got:
+ *[0-9a-f]* 00000000 80000000 00000000 00000000 *\..*
+ *[0-9a-f]* 00000000 00000000 00000000 00000ba8 *\..*
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2.d
new file mode 100644
index 00000000..e6322ca8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2.d
@@ -0,0 +1,10 @@
+
+.*file format.*
+
+Disassembly of section \.text:
+
+.* <.*>:
+.*: 8f82802c * lw v0,-32724\(gp\)
+ \.\.\.
+.*: 8f82802c * lw v0,-32724\(gp\)
+ \.\.\.
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2a.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2a.s
new file mode 100644
index 00000000..91a0b9e5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tls-hidden2b.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2b.s
new file mode 100644
index 00000000..6a8e190a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden2b.s
@@ -0,0 +1,2 @@
+ .text
+ lw $2,%gottprel(tls_hidden)($28)
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.d
new file mode 100644
index 00000000..6d586869
--- /dev/null
+++ b/binutils-2.17/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: 8f848030 lw a0,-32720\(gp\)
+ 80c04: 8f84803c lw a0,-32708\(gp\)
+ 80c08: 8f848034 lw a0,-32716\(gp\)
+ 80c0c: 8f848038 lw a0,-32712\(gp\)
+ 80c10: 8f848030 lw a0,-32720\(gp\)
+ 80c14: 8f84803c lw a0,-32708\(gp\)
+ 80c18: 8f848034 lw a0,-32716\(gp\)
+ 80c1c: 8f848038 lw a0,-32712\(gp\)
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.got
new file mode 100644
index 00000000..8b9c87f8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.got
@@ -0,0 +1,24 @@
+
+.*: 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 00000000 .*
+ 90010 00000000 00000000 00000000 00000000 .*
+ 90020 0000abc0 0000abc8 0000abcc 0000abc4 .*
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.ld
new file mode 100644
index 00000000..b3d0584c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.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);
+ .tdata : { *(.tdata) }
+
+ /DISCARD/ : { *(.reginfo) }
+}
+
+VERSION
+{
+ { local: *; };
+}
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.r b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3.r
new file mode 100644
index 00000000..500e7b17
--- /dev/null
+++ b/binutils-2.17/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.
+#
+00090020 0000002f R_MIPS_TLS_TPREL3
+0009002c 0000002f R_MIPS_TLS_TPREL3
+00090024 0000002f R_MIPS_TLS_TPREL3
+00090028 0000002f R_MIPS_TLS_TPREL3
+00090030 .*03 R_MIPS_REL32 00000000 undef
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3a.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3a.s
new file mode 100644
index 00000000..d1e6d646
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tls-hidden3b.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden3b.s
new file mode 100644
index 00000000..0744b078
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tls-hidden4.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4.got
new file mode 100644
index 00000000..84120c04
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4.got
@@ -0,0 +1,28 @@
+
+.*: 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.
+#
+#...
+ 1c4080 0000abc8 0000abcc 0000abc0 0000abc4 .*
+#
+# Likewise, but the order of the entries in this GOT is:
+#
+# foo3
+# foo2
+# foo0
+# foo1
+#...
+ 1d00c0 00000000 00000000 00000000 0000abcc .*
+ 1d00d0 0000abc8 0000abc0 0000abc4 .*
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4.r b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4.r
new file mode 100644
index 00000000..f6809b52
--- /dev/null
+++ b/binutils-2.17/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.
+#
+001d00d4 0000002f R_MIPS_TLS_TPREL3
+001d00d8 0000002f R_MIPS_TLS_TPREL3
+001d00d0 0000002f R_MIPS_TLS_TPREL3
+001d00cc 0000002f R_MIPS_TLS_TPREL3
+001c4088 0000002f R_MIPS_TLS_TPREL3
+001c408c 0000002f R_MIPS_TLS_TPREL3
+001c4080 0000002f R_MIPS_TLS_TPREL3
+001c4084 0000002f R_MIPS_TLS_TPREL3
+.* R_MIPS_REL32 .*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4a.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4a.s
new file mode 100644
index 00000000..02a0d35b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tls-hidden4b.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-hidden4b.s
new file mode 100644
index 00000000..d6deb002
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1-1.s
new file mode 100644
index 00000000..60f6717c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1-2.s
new file mode 100644
index 00000000..6b04b98f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.d
new file mode 100644
index 00000000..06786858
--- /dev/null
+++ b/binutils-2.17/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]+: 27841c90 addiu a0,gp,7312
+ [0-9a-f]+: 27841c84 addiu a0,gp,7300
+ [0-9a-f]+: 24441c8c addiu a0,v0,7308
+ [0-9a-f]+: 00000000 nop
+
+[0-9a-f]+ <sym_2_0000>:
+#...
+[0-9a-f]+ <tls_bits_2>:
+ [0-9a-f]+: 27841c90 addiu a0,gp,7312
+ [0-9a-f]+: 27841c84 addiu a0,gp,7300
+ [0-9a-f]+: 24441c8c addiu a0,v0,7308
+ [0-9a-f]+: 00000000 nop
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.got
new file mode 100644
index 00000000..fb8cc665
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.got
@@ -0,0 +1,58 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+001495d0 R_MIPS_TLS_DTPMOD32 \*ABS\*
+0013f948 R_MIPS_TLS_DTPMOD32 \*ABS\*
+001495dc R_MIPS_TLS_DTPMOD32 tlsvar_gd
+001495e0 R_MIPS_TLS_DTPREL32 tlsvar_gd
+0013f954 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+0013f958 R_MIPS_TLS_DTPREL32 tlsvar_gd
+001495d8 R_MIPS_TLS_TPREL32 tlsvar_ie
+0013f950 R_MIPS_TLS_TPREL32 tlsvar_ie
+00135fcc R_MIPS_REL32 sym_2_8355
+#...
+00142cec R_MIPS_REL32 sym_1_0945
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+00000000 R_MIPS_NONE \*ABS\*
+
+
+Contents of section .got:
+ 122420 00000000 80000000 00000000 00000000 ................
+ 122430 00000000 00000000 00000000 00000000 ................
+ 122440 00000000 00000000 00000000 00000000 ................
+ 122450 00000000 000e0a4c 000d3594 000d3584 ..........5...5.
+#...
+ 13f930 00000000 00000000 00000000 00000000 ................
+ 13f940 00000000 00000000 00000000 00000000 ................
+ 13f950 00000000 00000000 00000000 00000000 ................
+ 13f960 80000000 00000000 00000000 00000000 ................
+#...
+ 1495a0 00000000 00000000 00000000 00000000 ................
+ 1495b0 00000000 00000000 00000000 00000000 ................
+ 1495c0 00000000 00000000 00000000 00000000 ................
+ 1495d0 00000000 00000000 00000000 00000000 ................
+ 1495e0 00000000 ....
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.r b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
new file mode 100644
index 00000000..6b6be78b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tls-multi-got-1.r
@@ -0,0 +1,61 @@
+
+Dynamic section at offset 0xec contains 19 entries:
+ Tag Type Name/Value
+ 0x00000004 \(HASH\) 0x1ac
+ 0x00000005 \(STRTAB\) 0x71db8
+ 0x00000006 \(SYMTAB\) 0x23ad8
+ 0x0000000a \(STRSZ\) 220091 \(bytes\)
+ 0x0000000b \(SYMENT\) 16 \(bytes\)
+ 0x00000015 \(DEBUG\) 0x0
+ 0x00000003 \(PLTGOT\) 0x122420
+ 0x00000011 \(REL\) 0xa7974
+ 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\) 13
+ 0x70000011 \(MIPS_SYMTABNO\) 20014
+ 0x70000012 \(MIPS_UNREFEXTNO\) 11
+ 0x70000013 \(MIPS_GOTSYM\) 0xe
+ 0x0000001e \(FLAGS\) STATIC_TLS
+ 0x00000000 \(NULL\) 0x0
+
+Relocation section '\.rel\.dyn' at offset 0x[0-9a-f]+ contains 20031 entries:
+ Offset Info Type Sym.Value Sym. Name
+00000000 00000000 R_MIPS_NONE
+001495d0 00000026 R_MIPS_TLS_DTPMOD
+0013f948 00000026 R_MIPS_TLS_DTPMOD
+001495dc 00000626 R_MIPS_TLS_DTPMOD 00000000 tlsvar_gd
+001495e0 00000627 R_MIPS_TLS_DTPREL 00000000 tlsvar_gd
+0013f954 00000626 R_MIPS_TLS_DTPMOD 00000000 tlsvar_gd
+0013f958 00000627 R_MIPS_TLS_DTPREL 00000000 tlsvar_gd
+001495d8 00000c2f R_MIPS_TLS_TPREL3 00000004 tlsvar_ie
+0013f950 00000c2f R_MIPS_TLS_TPREL3 00000004 tlsvar_ie
+00135fcc 00000e03 R_MIPS_REL32 000e0a4c sym_2_8355
+001424ac 00000f03 R_MIPS_REL32 000d3594 sym_1_4745
+#...
+001369b0 004e2c03 R_MIPS_REL32 000da930 sym_2_2140
+00142cec 004e2d03 R_MIPS_REL32 000cfa34 sym_1_0945
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
+00000000 00000000 R_MIPS_NONE
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsbin-o32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsbin-o32.d
new file mode 100644
index 00000000..d20ad226
--- /dev/null
+++ b/binutils-2.17/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: 8f99802c lw t9,-32724\(gp\)
+ 4000f0: 2784803c addiu a0,gp,-32708
+ 4000f4: 0320f809 jalr t9
+ 4000f8: 00000000 nop
+ 4000fc: 8fdc0000 lw gp,0\(s8\)
+ 400100: 00000000 nop
+ 400104: 8f99802c lw t9,-32724\(gp\)
+ 400108: 27848034 addiu a0,gp,-32716
+ 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: 8f838030 lw v1,-32720\(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.17/ld/testsuite/ld-mips-elf/tlsbin-o32.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsbin-o32.got
new file mode 100644
index 00000000..e9246209
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsbin-o32.got
@@ -0,0 +1,8 @@
+
+.*: file format elf32-tradbigmips
+
+Contents of section .got:
+ 10000010 00000000 80000000 00000000 00000000 ................
+ 10000020 00000000 00000000 00000000 00400158 .............@.X
+ 10000030 ffff900c 00000001 00000000 00000001 ................
+ 10000040 ffff8008 ....
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsbin-o32.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsbin-o32.s
new file mode 100644
index 00000000..8ff9831c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d
new file mode 100644
index 00000000..80da2476
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d
@@ -0,0 +1,104 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+.* <__start>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7b70 addiu gp,gp,31600
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f99802c lw t9,-32724\(gp\)
+ .*: 27848044 addiu a0,gp,-32700
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f99802c lw t9,-32724\(gp\)
+ .*: 27848038 addiu a0,gp,-32712
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f99802c lw t9,-32724\(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
+ .*: 8f83804c lw v1,-32692\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f838040 lw v1,-32704\(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
+ .*: 279c7ab0 addiu gp,gp,31408
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f99802c lw t9,-32724\(gp\)
+ .*: 27848044 addiu a0,gp,-32700
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f99802c lw t9,-32724\(gp\)
+ .*: 27848038 addiu a0,gp,-32712
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f99802c lw t9,-32724\(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
+ .*: 8f83804c lw v1,-32692\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f838040 lw v1,-32704\(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
+Disassembly of section .MIPS.stubs:
+
+.* <.MIPS.stubs>:
+ ...
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got
new file mode 100644
index 00000000..8f5084fb
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got
@@ -0,0 +1,19 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+10000044 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+10000048 R_MIPS_TLS_DTPREL32 tlsbin_gd
+10000038 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+1000003c R_MIPS_TLS_DTPREL32 tlsvar_gd
+10000040 R_MIPS_TLS_TPREL32 tlsvar_ie
+1000004c R_MIPS_TLS_TPREL32 tlsbin_ie
+
+
+Contents of section .got:
+ 10000010 00000000 80000000 00000000 00000000 ................
+ 10000020 00000000 00000000 00000000 0040053c .............@..
+ 10000030 00000001 00000000 00000000 00000000 ................
+ 10000040 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d
new file mode 100644
index 00000000..00965208
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d
@@ -0,0 +1,104 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+.* <__start>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7b70 addiu gp,gp,31600
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 27848048 addiu a0,gp,-32696
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 2784803c addiu a0,gp,-32708
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 27848034 addiu a0,gp,-32716
+ .*: 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
+ .*: 8f838050 lw v1,-32688\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f838044 lw v1,-32700\(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
+ .*: 279c7ab0 addiu gp,gp,31408
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 27848048 addiu a0,gp,-32696
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 2784803c addiu a0,gp,-32708
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 27848034 addiu a0,gp,-32716
+ .*: 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
+ .*: 8f838050 lw v1,-32688\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f838044 lw v1,-32700\(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
+Disassembly of section .MIPS.stubs:
+
+.* <.MIPS.stubs>:
+ ...
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got
new file mode 100644
index 00000000..9f8b3ba1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got
@@ -0,0 +1,20 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+10000048 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+1000004c R_MIPS_TLS_DTPREL32 tlsbin_gd
+1000003c R_MIPS_TLS_DTPMOD32 tlsvar_gd
+10000040 R_MIPS_TLS_DTPREL32 tlsvar_gd
+10000044 R_MIPS_TLS_TPREL32 tlsvar_ie
+10000050 R_MIPS_TLS_TPREL32 tlsbin_ie
+
+
+Contents of section .got:
+ 10000010 00000000 80000000 00000000 00000000 ................
+ 10000020 00000000 00000000 00000000 00000000 ................
+ 10000030 0040053c 00000001 00000000 00000000 .@.<............
+ 10000040 00000000 00000000 00000000 00000000 ................
+ 10000050 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.s
new file mode 100644
index 00000000..7943775e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d
new file mode 100644
index 00000000..ae671e8d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d
@@ -0,0 +1,104 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+.* <other>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7b70 addiu gp,gp,31600
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 27848048 addiu a0,gp,-32696
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 2784803c addiu a0,gp,-32708
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 27848034 addiu a0,gp,-32716
+ .*: 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
+ .*: 8f838050 lw v1,-32688\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f838044 lw v1,-32700\(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
+ .*: 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\)
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 27848048 addiu a0,gp,-32696
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 2784803c addiu a0,gp,-32708
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f998030 lw t9,-32720\(gp\)
+ .*: 27848034 addiu a0,gp,-32716
+ .*: 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
+ .*: 8f838050 lw v1,-32688\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f838044 lw v1,-32700\(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
+ ...
+Disassembly of section .MIPS.stubs:
+
+.* <.MIPS.stubs>:
+ ...
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got
new file mode 100644
index 00000000..73429523
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got
@@ -0,0 +1,20 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+10000048 R_MIPS_TLS_DTPMOD32 tlsbin_gd
+1000004c R_MIPS_TLS_DTPREL32 tlsbin_gd
+1000003c R_MIPS_TLS_DTPMOD32 tlsvar_gd
+10000040 R_MIPS_TLS_DTPREL32 tlsvar_gd
+10000044 R_MIPS_TLS_TPREL32 tlsvar_ie
+10000050 R_MIPS_TLS_TPREL32 tlsbin_ie
+
+
+Contents of section .got:
+ 10000010 00000000 80000000 00000000 00000000 ................
+ 10000020 00000000 00000000 00000000 00000000 ................
+ 10000030 004005ec 00000001 00000000 00000000 .@..............
+ 10000040 00000000 00000000 00000000 00000000 ................
+ 10000050 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.d
new file mode 100644
index 00000000..5fb13a09
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.d
@@ -0,0 +1,58 @@
+
+.*: file format elf32-tradbigmips
+
+Disassembly of section .text:
+
+.* <__start>:
+ .*: 3c1c0fc0 lui gp,0xfc0
+ .*: 279c7bb0 addiu gp,gp,31664
+ .*: 0399e021 addu gp,gp,t9
+ .*: 27bdfff0 addiu sp,sp,-16
+ .*: afbe0008 sw s8,8\(sp\)
+ .*: 03a0f021 move s8,sp
+ .*: afbc0000 sw gp,0\(sp\)
+ .*: 8f99802c lw t9,-32724\(gp\)
+ .*: 27848038 addiu a0,gp,-32712
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f99802c lw t9,-32724\(gp\)
+ .*: 27848048 addiu a0,gp,-32696
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f99802c lw t9,-32724\(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
+ .*: 8f838044 lw v1,-32700\(gp\)
+ .*: 00000000 nop
+ .*: 00621821 addu v1,v1,v0
+ .*: 8f838040 lw v1,-32704\(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
+ ...
+Disassembly of section .MIPS.stubs:
+
+.* <.MIPS.stubs>:
+ ...
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.got
new file mode 100644
index 00000000..206fd241
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.got
@@ -0,0 +1,19 @@
+
+tmpdir/tls-dynamic-o32: 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
+10000048 R_MIPS_TLS_DTPMOD32 tlsvar_gd
+1000004c R_MIPS_TLS_DTPREL32 tlsvar_gd
+10000044 R_MIPS_TLS_TPREL32 tlsbin_ie
+10000040 R_MIPS_TLS_TPREL32 tlsvar_ie
+
+
+Contents of section .got:
+ 10000010 00000000 80000000 00000000 00000000 ................
+ 10000020 00000000 00000000 00000000 004004fc ................
+ 10000030 00000001 00000000 00000000 00000000 ................
+ 10000040 00000000 00000000 00000000 00000000 ................
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tlsdyn-o32.s
new file mode 100644
index 00000000..29242219
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tlslib-hidden.ver b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-hidden.ver
new file mode 100644
index 00000000..e59012ff
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-hidden.ver
@@ -0,0 +1,3 @@
+VER_1 {
+ local: *;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got
new file mode 100644
index 00000000..a897ec46
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32-hidden.got
@@ -0,0 +1,16 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+000403fc R_MIPS_TLS_DTPMOD32 \*ABS\*
+000403f4 R_MIPS_TLS_DTPMOD32 \*ABS\*
+000403f0 R_MIPS_TLS_TPREL32 \*ABS\*
+
+
+Contents of section .got:
+ 403d0 00000000 80000000 00000000 00000000 ................
+ 403e0 00000000 00000000 00000000 000003a0 ................
+ 403f0 00000008 00000000 00000000 00000000 ................
+ 40400 ffff8004 ....
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got
new file mode 100644
index 00000000..94de6532
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32-ver.got
@@ -0,0 +1,17 @@
+
+.*: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+00040574 R_MIPS_TLS_DTPMOD32 \*ABS\*
+0004057c R_MIPS_TLS_DTPMOD32 tlsvar_gd
+00040580 R_MIPS_TLS_DTPREL32 tlsvar_gd
+00040570 R_MIPS_TLS_TPREL32 tlsvar_ie
+
+
+Contents of section .got:
+ 40550 00000000 80000000 00000000 00000000 ................
+ 40560 00000000 00000000 00000000 00000520 ................
+ 40570 00000000 00000000 00000000 00000000 ................
+ 40580 00000000 ....
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32.d b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32.d
new file mode 100644
index 00000000..32fd7e3a
--- /dev/null
+++ b/binutils-2.17/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\)
+ .*: 8f99802c lw t9,-32724\(gp\)
+ .*: 2784803c addiu a0,gp,-32708
+ .*: 0320f809 jalr t9
+ .*: 00000000 nop
+ .*: 8fdc0000 lw gp,0\(s8\)
+ .*: 00000000 nop
+ .*: 8f99802c lw t9,-32724\(gp\)
+ .*: 27848034 addiu a0,gp,-32716
+ .*: 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
+ .*: 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.17/ld/testsuite/ld-mips-elf/tlslib-o32.got b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32.got
new file mode 100644
index 00000000..1831eb26
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32.got
@@ -0,0 +1,17 @@
+
+tmpdir/tlslib-o32.so: file format elf32-tradbigmips
+
+DYNAMIC RELOCATION RECORDS
+OFFSET TYPE VALUE
+00000000 R_MIPS_NONE \*ABS\*
+000404d4 R_MIPS_TLS_DTPMOD32 \*ABS\*
+000404dc R_MIPS_TLS_DTPMOD32 tlsvar_gd
+000404e0 R_MIPS_TLS_DTPREL32 tlsvar_gd
+000404d0 R_MIPS_TLS_TPREL32 tlsvar_ie
+
+
+Contents of section .got:
+ 404b0 00000000 80000000 00000000 00000000 ................
+ 404c0 00000000 00000000 00000000 00000480 ................
+ 404d0 00000000 00000000 00000000 00000000 ................
+ 404e0 00000000 ....
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32.s b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib-o32.s
new file mode 100644
index 00000000..c15829f5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/tlslib.ver b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib.ver
new file mode 100644
index 00000000..441c5257
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/tlslib.ver
@@ -0,0 +1,3 @@
+VER_1 {
+ global: *;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.dd b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.dd
new file mode 100644
index 00000000..ab060d98
--- /dev/null
+++ b/binutils-2.17/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: 8f820014 lw v0,20\(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.17/ld/testsuite/ld-mips-elf/vxworks1-lib.nd b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.nd
new file mode 100644
index 00000000..adbf7d77
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/vxworks1-lib.rd b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.rd
new file mode 100644
index 00000000..9a8b35e7
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.rd
@@ -0,0 +1,18 @@
+
+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 .*02 R_MIPS_32 00080c00 \.text \+ 5c
+00081c00 00000002 R_MIPS_32 00080c5c
+00081c04 00000002 R_MIPS_32 00081c00
+00081c08 .*02 R_MIPS_32 00081c08 dglobal \+ 0
+00081c0c .*02 R_MIPS_32 00000000 dexternal \+ 0
+00081424 .*02 R_MIPS_32 00081800 x \+ 0
+00000000 00000000 R_MIPS_NONE 00000000
+#...
+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.17/ld/testsuite/ld-mips-elf/vxworks1-lib.s b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-lib.s
new file mode 100644
index 00000000..827332c0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/vxworks1-static.d b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1-static.d
new file mode 100644
index 00000000..88c0baf1
--- /dev/null
+++ b/binutils-2.17/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
+#error: Dynamic sections created in non-dynamic link
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.dd b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.dd
new file mode 100644
index 00000000..af9e3543
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/vxworks1.ld b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.ld
new file mode 100644
index 00000000..74e2c261
--- /dev/null
+++ b/binutils-2.17/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);
+ .bss : { *(.bss) *(.dynbss) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+
+ /DISCARD/ : { *(.reginfo) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.rd b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.rd
new file mode 100644
index 00000000..f4793a22
--- /dev/null
+++ b/binutils-2.17/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
+00081800 .*7e R_MIPS_COPY 00081800 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
+00081c00 .*02 R_MIPS_32 00081c00 .data \+ 0
+00081c04 .*02 R_MIPS_32 00081800 .bss \+ 0
+00081c08 .*02 R_MIPS_32 00081c04 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.17/ld/testsuite/ld-mips-elf/vxworks1.s b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks1.s
new file mode 100644
index 00000000..33a247f7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/vxworks2-static.sd b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks2-static.sd
new file mode 100644
index 00000000..912755bc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/vxworks2.s b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks2.s
new file mode 100644
index 00000000..25f078e8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mips-elf/vxworks2.sd b/binutils-2.17/ld/testsuite/ld-mips-elf/vxworks2.sd
new file mode 100644
index 00000000..5ff87d3b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/a.s b/binutils-2.17/ld/testsuite/ld-mmix/a.s
new file mode 100644
index 00000000..20e571b3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/areg-256.s b/binutils-2.17/ld/testsuite/ld-mmix/areg-256.s
new file mode 100644
index 00000000..21012d80
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/areg-256.s
@@ -0,0 +1,2 @@
+ .global areg
+areg IS $255+1
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/areg-t.s b/binutils-2.17/ld/testsuite/ld-mmix/areg-t.s
new file mode 100644
index 00000000..364b01c6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/areg-t.s
@@ -0,0 +1,3 @@
+ .text
+ .global areg
+areg SWYM 4,8,16
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/aregm.s b/binutils-2.17/ld/testsuite/ld-mmix/aregm.s
new file mode 100644
index 00000000..2dacbada
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badfil1.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badfil1.d
new file mode 100644
index 00000000..8a945fba
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badfil1.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badfil1.s
new file mode 100644
index 00000000..256fa780
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badfil2.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badfil2.d
new file mode 100644
index 00000000..3f98a773
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badfil2.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badfil2.s
new file mode 100644
index 00000000..23d68bae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badfixo.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badfixo.d
new file mode 100644
index 00000000..3cb60887
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badfixo.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badfixo.s
new file mode 100644
index 00000000..93cd6d0c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badloc.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badloc.d
new file mode 100644
index 00000000..dce1ebfe
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badloc.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badloc.s
new file mode 100644
index 00000000..098098aa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badlop.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badlop.d
new file mode 100644
index 00000000..b8c55e58
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badlop.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badlop.s
new file mode 100644
index 00000000..9e133328
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badm.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badm.d
new file mode 100644
index 00000000..39d8ecb5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badm2.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badm2.s
new file mode 100644
index 00000000..eb942782
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badmain.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badmain.s
new file mode 100644
index 00000000..47369550
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badquot.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badquot.d
new file mode 100644
index 00000000..ae3d095f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badquot.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badquot.s
new file mode 100644
index 00000000..77742dbc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badrx1.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badrx1.d
new file mode 100644
index 00000000..10334763
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badrx1.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badrx1.s
new file mode 100644
index 00000000..dd35763a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badrx2.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badrx2.d
new file mode 100644
index 00000000..6e13019b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badrx2.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badrx2.s
new file mode 100644
index 00000000..20def6c0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badrx3.d b/binutils-2.17/ld/testsuite/ld-mmix/b-badrx3.d
new file mode 100644
index 00000000..c1cffed9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-badrx3.s b/binutils-2.17/ld/testsuite/ld-mmix/b-badrx3.s
new file mode 100644
index 00000000..59cd5cb3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-bend.s b/binutils-2.17/ld/testsuite/ld-mmix/b-bend.s
new file mode 100644
index 00000000..1168ee9d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-bend1.d b/binutils-2.17/ld/testsuite/ld-mmix/b-bend1.d
new file mode 100644
index 00000000..e7477531
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-bend2.d b/binutils-2.17/ld/testsuite/ld-mmix/b-bend2.d
new file mode 100644
index 00000000..234b4e59
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-bend3.d b/binutils-2.17/ld/testsuite/ld-mmix/b-bend3.d
new file mode 100644
index 00000000..3448c22d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-bstab1.d b/binutils-2.17/ld/testsuite/ld-mmix/b-bstab1.d
new file mode 100644
index 00000000..6281f062
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-bstab1.s b/binutils-2.17/ld/testsuite/ld-mmix/b-bstab1.s
new file mode 100644
index 00000000..02101064
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-fixo2.d b/binutils-2.17/ld/testsuite/ld-mmix/b-fixo2.d
new file mode 100644
index 00000000..e8e2ff84
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-fixo2.s b/binutils-2.17/ld/testsuite/ld-mmix/b-fixo2.s
new file mode 100644
index 00000000..f8929993
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-goodmain.s b/binutils-2.17/ld/testsuite/ld-mmix/b-goodmain.s
new file mode 100644
index 00000000..c90063eb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-loc64k.d b/binutils-2.17/ld/testsuite/ld-mmix/b-loc64k.d
new file mode 100644
index 00000000..01246432
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-loc64k.s b/binutils-2.17/ld/testsuite/ld-mmix/b-loc64k.s
new file mode 100644
index 00000000..ea563d22
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-nosym.d b/binutils-2.17/ld/testsuite/ld-mmix/b-nosym.d
new file mode 100644
index 00000000..c7953eca
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-nosym.s b/binutils-2.17/ld/testsuite/ld-mmix/b-nosym.s
new file mode 100644
index 00000000..08bfdbf5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-offloc.s b/binutils-2.17/ld/testsuite/ld-mmix/b-offloc.s
new file mode 100644
index 00000000..c2fb2cc3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-post1.s b/binutils-2.17/ld/testsuite/ld-mmix/b-post1.s
new file mode 100644
index 00000000..a60aecec
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-twoinsn.s b/binutils-2.17/ld/testsuite/ld-mmix/b-twoinsn.s
new file mode 100644
index 00000000..d9e01470
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-widec.s b/binutils-2.17/ld/testsuite/ld-mmix/b-widec.s
new file mode 100644
index 00000000..c6f8c302
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-widec1.d b/binutils-2.17/ld/testsuite/ld-mmix/b-widec1.d
new file mode 100644
index 00000000..e290ba13
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-widec2.d b/binutils-2.17/ld/testsuite/ld-mmix/b-widec2.d
new file mode 100644
index 00000000..4094b59c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-widec2.s b/binutils-2.17/ld/testsuite/ld-mmix/b-widec2.s
new file mode 100644
index 00000000..7745365f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-widec3.d b/binutils-2.17/ld/testsuite/ld-mmix/b-widec3.d
new file mode 100644
index 00000000..f4cb3b97
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/b-widec3.s b/binutils-2.17/ld/testsuite/ld-mmix/b-widec3.s
new file mode 100644
index 00000000..0c028923
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-1.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-1.d
new file mode 100644
index 00000000..5b07e5f4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-1.d
@@ -0,0 +1,24 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-1.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-1.s
new file mode 100644
index 00000000..0a76e40d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-10.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-10.d
new file mode 100644
index 00000000..dfd98581
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-10.d
@@ -0,0 +1,25 @@
+#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 d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+0+ l \.init 0+ _start
+2000000000000000 g \*ABS\* 0+ __bss_start
+2000000000000000 g \*ABS\* 0+ _edata
+2000000000000000 g \*ABS\* 0+ _end
+0+4 g \*ABS\* 0+ _start\.
+
+Contents of section \.init:
+ 0000 e37704a6 .*
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/bpo-10.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-10.s
new file mode 100644
index 00000000..a4d1c12d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-11.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-11.d
new file mode 100644
index 00000000..1adeb1d7
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-11.d
@@ -0,0 +1,34 @@
+#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 d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-11.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-11.s
new file mode 100644
index 00000000..51ed92fb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-12.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-12.d
new file mode 100644
index 00000000..2961e8bf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-12m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-12m.d
new file mode 100644
index 00000000..7d847fe4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-13.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-13.d
new file mode 100644
index 00000000..78f7c7ae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-13m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-13m.d
new file mode 100644
index 00000000..8bd0bf6f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-14.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-14.d
new file mode 100644
index 00000000..e57412c3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-14.d
@@ -0,0 +1,25 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-14m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-14m.d
new file mode 100644
index 00000000..541b1085
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-15.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-15.d
new file mode 100644
index 00000000..6845a878
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-15m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-15m.d
new file mode 100644
index 00000000..eacedf57
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-16.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-16.d
new file mode 100644
index 00000000..a4022e16
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-16.d
@@ -0,0 +1,26 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-16m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-16m.d
new file mode 100644
index 00000000..f1fe3369
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-17.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-17.d
new file mode 100644
index 00000000..6c8fe34f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-17.d
@@ -0,0 +1,26 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-17m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-17m.d
new file mode 100644
index 00000000..6458ebed
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-18.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-18.d
new file mode 100644
index 00000000..96fda3b6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-18.d
@@ -0,0 +1,32 @@
+#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)
+0+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-18m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-18m.d
new file mode 100644
index 00000000..b21b6cf4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-19.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-19.d
new file mode 100644
index 00000000..870dba23
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-19.d
@@ -0,0 +1,36 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+#...
+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.17/ld/testsuite/ld-mmix/bpo-19m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-19m.d
new file mode 100644
index 00000000..7f740e17
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-1m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-1m.d
new file mode 100644
index 00000000..b2d0384c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-2.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-2.d
new file mode 100644
index 00000000..4781175e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-2.d
@@ -0,0 +1,26 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-2.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-2.s
new file mode 100644
index 00000000..02c79019
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-2.s
@@ -0,0 +1,2 @@
+ .global y
+y LDA $33,y+8
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/bpo-20.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-20.d
new file mode 100644
index 00000000..f05edfb5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-20m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-20m.d
new file mode 100644
index 00000000..91126b48
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-21.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-21.d
new file mode 100644
index 00000000..f208cb6a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-21m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-21m.d
new file mode 100644
index 00000000..b437dd38
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-22.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-22.d
new file mode 100644
index 00000000..15aea853
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-22.d
@@ -0,0 +1,25 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-2m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-2m.d
new file mode 100644
index 00000000..7ddcfd26
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-3.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-3.d
new file mode 100644
index 00000000..00fb7a9b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-3.d
@@ -0,0 +1,27 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-3.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-3.s
new file mode 100644
index 00000000..b975a82e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-3.s
@@ -0,0 +1 @@
+ LDOU $121,_start+42+4+4+257
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/bpo-3m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-3m.d
new file mode 100644
index 00000000..c0f47071
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-4.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-4.d
new file mode 100644
index 00000000..1e7c9036
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-4.d
@@ -0,0 +1,28 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-4.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-4.s
new file mode 100644
index 00000000..c5c21cf5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-4m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-4m.d
new file mode 100644
index 00000000..2f3b59c0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-5.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-5.d
new file mode 100644
index 00000000..04600281
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-5.d
@@ -0,0 +1,28 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-5.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-5.s
new file mode 100644
index 00000000..c0fcfacb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-5m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-5m.d
new file mode 100644
index 00000000..078d34ec
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-6.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-6.d
new file mode 100644
index 00000000..39c3a912
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-6.d
@@ -0,0 +1,33 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+#...
+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.17/ld/testsuite/ld-mmix/bpo-6.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-6.s
new file mode 100644
index 00000000..a10e9a86
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-6m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-6m.d
new file mode 100644
index 00000000..9d8e3044
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-7.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-7.d
new file mode 100644
index 00000000..693a5027
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-7.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-7.s
new file mode 100644
index 00000000..b920764d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-7m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-7m.d
new file mode 100644
index 00000000..21c46597
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-8.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-8.d
new file mode 100644
index 00000000..438b0728
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-8.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-8.s
new file mode 100644
index 00000000..ebe410d0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-8m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-8m.d
new file mode 100644
index 00000000..9187672d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-9.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-9.d
new file mode 100644
index 00000000..f230b195
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bpo-9.d
@@ -0,0 +1,29 @@
+#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 d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/bpo-9.s b/binutils-2.17/ld/testsuite/ld-mmix/bpo-9.s
new file mode 100644
index 00000000..a608c687
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo-9m.d b/binutils-2.17/ld/testsuite/ld-mmix/bpo-9m.d
new file mode 100644
index 00000000..fa3f97c2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bpo64addr.ld b/binutils-2.17/ld/testsuite/ld-mmix/bpo64addr.ld
new file mode 100644
index 00000000..0324aa53
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bspec1.d b/binutils-2.17/ld/testsuite/ld-mmix/bspec1.d
new file mode 100644
index 00000000..ce83480f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bspec1.d
@@ -0,0 +1,46 @@
+#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+120 0+18 5 6 8
+ \[ 5\] \.strtab STRTAB 0+ 0+358
+ 0+2d 0+ 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+There are no relocations in this file\.
+
+Symbol table '\.symtab' contains 12 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 SECTION LOCAL DEFAULT 4
+ 5: 0+ 0 SECTION LOCAL DEFAULT 5
+ 6: 0+ 0 FUNC GLOBAL DEFAULT 1 Main
+ 7: 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.17/ld/testsuite/ld-mmix/bspec1.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec1.s
new file mode 100644
index 00000000..0c1707f6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bspec1.s
@@ -0,0 +1,3 @@
+ BSPEC 2
+ TETRA :Main+42
+ ESPEC
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/bspec1m.d b/binutils-2.17/ld/testsuite/ld-mmix/bspec1m.d
new file mode 100644
index 00000000..c3fedf87
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bspec2.d b/binutils-2.17/ld/testsuite/ld-mmix/bspec2.d
new file mode 100644
index 00000000..b5e683b9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bspec2.d
@@ -0,0 +1,56 @@
+#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+150 0+18 6 7 8
+ \[ 6\] \.strtab STRTAB 0+ 0+3e0
+ 0+32 0+ 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+There are no relocations in this file\.
+
+Symbol table '\.symtab' contains 14 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 SECTION LOCAL DEFAULT 4
+ 5: 0+ 0 SECTION LOCAL DEFAULT 5
+ 6: 0+ 0 SECTION LOCAL DEFAULT 6
+ 7: 0+ 0 FUNC GLOBAL DEFAULT 1 Main
+ 8: 0+fc 0 NOTYPE GLOBAL DEFAULT ABS ext1
+ 9: 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.17/ld/testsuite/ld-mmix/bspec2.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec2.s
new file mode 100644
index 00000000..f939d77f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bspec2.s
@@ -0,0 +1,3 @@
+ BSPEC 3
+ TETRA ext1
+ ESPEC
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/bspec2m.d b/binutils-2.17/ld/testsuite/ld-mmix/bspec2m.d
new file mode 100644
index 00000000..11bd48ed
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bspec801.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec801.s
new file mode 100644
index 00000000..9c629091
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/bspec801.s
@@ -0,0 +1,3 @@
+ BSPEC 80
+ TETRA 0x98000001
+ ESPEC
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/bspec802.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec802.s
new file mode 100644
index 00000000..13cbec45
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bspec803.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec803.s
new file mode 100644
index 00000000..64b5e3b0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bspec804.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec804.s
new file mode 100644
index 00000000..2c64c0ae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bspec805.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec805.s
new file mode 100644
index 00000000..a5c09e34
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bspec806.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec806.s
new file mode 100644
index 00000000..8f6c75f8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bspec807.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec807.s
new file mode 100644
index 00000000..3c16c127
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bspec808.s b/binutils-2.17/ld/testsuite/ld-mmix/bspec808.s
new file mode 100644
index 00000000..b8fc4951
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bza-1b.d b/binutils-2.17/ld/testsuite/ld-mmix/bza-1b.d
new file mode 100644
index 00000000..dcd03132
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bza-1f.d b/binutils-2.17/ld/testsuite/ld-mmix/bza-1f.d
new file mode 100644
index 00000000..bc4006fa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bza-2b.d b/binutils-2.17/ld/testsuite/ld-mmix/bza-2b.d
new file mode 100644
index 00000000..a5d9b288
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bza-2f.d b/binutils-2.17/ld/testsuite/ld-mmix/bza-2f.d
new file mode 100644
index 00000000..21a6ca94
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bza-7b.d b/binutils-2.17/ld/testsuite/ld-mmix/bza-7b.d
new file mode 100644
index 00000000..ab98ad36
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bza-7f.d b/binutils-2.17/ld/testsuite/ld-mmix/bza-7f.d
new file mode 100644
index 00000000..be2ea56d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bza-8b.d b/binutils-2.17/ld/testsuite/ld-mmix/bza-8b.d
new file mode 100644
index 00000000..b0eef740
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bza-8f.d b/binutils-2.17/ld/testsuite/ld-mmix/bza-8f.d
new file mode 100644
index 00000000..2d2a5217
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/bza.s b/binutils-2.17/ld/testsuite/ld-mmix/bza.s
new file mode 100644
index 00000000..4cf848d2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/data1.s b/binutils-2.17/ld/testsuite/ld-mmix/data1.s
new file mode 100644
index 00000000..0f4baf9f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/data1.s
@@ -0,0 +1,2 @@
+ LOC #20 << 56
+xx OCTA Main+44
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/dloc1.s b/binutils-2.17/ld/testsuite/ld-mmix/dloc1.s
new file mode 100644
index 00000000..ba095c4c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/dloc2.s b/binutils-2.17/ld/testsuite/ld-mmix/dloc2.s
new file mode 100644
index 00000000..704da08a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/ext1-254.s b/binutils-2.17/ld/testsuite/ld-mmix/ext1-254.s
new file mode 100644
index 00000000..baaf22f3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/ext1-254.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 IS 254
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/ext1.s b/binutils-2.17/ld/testsuite/ld-mmix/ext1.s
new file mode 100644
index 00000000..d69420e8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/ext1.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 IS 252
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/ext1g.s b/binutils-2.17/ld/testsuite/ld-mmix/ext1g.s
new file mode 100644
index 00000000..1a167ab2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/ext1g.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 GREG
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/ext1l.s b/binutils-2.17/ld/testsuite/ld-mmix/ext1l.s
new file mode 100644
index 00000000..b7e6096c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/ext1l.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 SWYM 4,8,16
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/getaa-1b.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-1b.d
new file mode 100644
index 00000000..84b477d3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-1f.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-1f.d
new file mode 100644
index 00000000..cc628a22
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-2b.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-2b.d
new file mode 100644
index 00000000..4300128a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-2f.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-2f.d
new file mode 100644
index 00000000..fd328349
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-4b.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-4b.d
new file mode 100644
index 00000000..1a3614bc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-4f.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-4f.d
new file mode 100644
index 00000000..30062a69
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-6b.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-6b.d
new file mode 100644
index 00000000..0d3c7111
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-6f.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-6f.d
new file mode 100644
index 00000000..370f6142
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-7b.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-7b.d
new file mode 100644
index 00000000..7a71c310
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-7f.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-7f.d
new file mode 100644
index 00000000..ea831a9c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-8b.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-8b.d
new file mode 100644
index 00000000..a54cc105
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa-8f.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa-8f.d
new file mode 100644
index 00000000..4ba73079
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa.s b/binutils-2.17/ld/testsuite/ld-mmix/getaa.s
new file mode 100644
index 00000000..cc4dfb77
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa12b.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa12b.d
new file mode 100644
index 00000000..c4e49e47
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa12f.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa12f.d
new file mode 100644
index 00000000..d80a39ce
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa14b.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa14b.d
new file mode 100644
index 00000000..47f37b90
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/getaa14f.d b/binutils-2.17/ld/testsuite/ld-mmix/getaa14f.d
new file mode 100644
index 00000000..58eb70b9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-1.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-1.d
new file mode 100644
index 00000000..b5a42ca6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-1.d
@@ -0,0 +1,30 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/greg-1.s b/binutils-2.17/ld/testsuite/ld-mmix/greg-1.s
new file mode 100644
index 00000000..821460c0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-10.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-10.d
new file mode 100644
index 00000000..acc702df
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-11.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-11.d
new file mode 100644
index 00000000..5fc474b1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-11b.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-11b.d
new file mode 100644
index 00000000..50665d01
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-12.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-12.d
new file mode 100644
index 00000000..b4386321
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-13.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-13.d
new file mode 100644
index 00000000..091cf465
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-14.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-14.d
new file mode 100644
index 00000000..19cc4511
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-14s.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-14s.d
new file mode 100644
index 00000000..466661c6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-15.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-15.d
new file mode 100644
index 00000000..4b541536
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-16.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-16.d
new file mode 100644
index 00000000..80b23389
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-17.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-17.d
new file mode 100644
index 00000000..e1af4b5e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-18.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-18.d
new file mode 100644
index 00000000..ed1bbaf8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-19.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-19.d
new file mode 100644
index 00000000..b4a90251
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-19.d
@@ -0,0 +1,24 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/greg-2.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-2.d
new file mode 100644
index 00000000..baf36474
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-2.d
@@ -0,0 +1,44 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/greg-2.s b/binutils-2.17/ld/testsuite/ld-mmix/greg-2.s
new file mode 100644
index 00000000..588cbf15
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-20.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-20.d
new file mode 100644
index 00000000..10daa083
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-3.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-3.d
new file mode 100644
index 00000000..0e55087f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-3.d
@@ -0,0 +1,39 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/greg-3.s b/binutils-2.17/ld/testsuite/ld-mmix/greg-3.s
new file mode 100644
index 00000000..52485913
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-4.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-4.d
new file mode 100644
index 00000000..67715ed1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-4.d
@@ -0,0 +1,38 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/greg-4.s b/binutils-2.17/ld/testsuite/ld-mmix/greg-4.s
new file mode 100644
index 00000000..5e5a30f1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-4.s
@@ -0,0 +1,2 @@
+# A single local greg.
+lsym GREG 78
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/greg-5.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-5.d
new file mode 100644
index 00000000..81f4fa5b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-5.d
@@ -0,0 +1,37 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/greg-5.s b/binutils-2.17/ld/testsuite/ld-mmix/greg-5.s
new file mode 100644
index 00000000..65400aff
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-5s.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-5s.d
new file mode 100644
index 00000000..30d3b04d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-5s.d
@@ -0,0 +1,28 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/greg-6.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-6.d
new file mode 100644
index 00000000..2cf163e6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-6.d
@@ -0,0 +1,289 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/greg-7.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-7.d
new file mode 100644
index 00000000..13d0aa23
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/greg-7.d
@@ -0,0 +1,289 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/greg-8.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-8.d
new file mode 100644
index 00000000..cb6b7760
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/greg-9.d b/binutils-2.17/ld/testsuite/ld-mmix/greg-9.d
new file mode 100644
index 00000000..c9d9fcdd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/gregbza1.s b/binutils-2.17/ld/testsuite/ld-mmix/gregbza1.s
new file mode 100644
index 00000000..878c66fd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/gregget1.s b/binutils-2.17/ld/testsuite/ld-mmix/gregget1.s
new file mode 100644
index 00000000..49f97f0c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/gregget2.s b/binutils-2.17/ld/testsuite/ld-mmix/gregget2.s
new file mode 100644
index 00000000..855136c4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/gregldo1.s b/binutils-2.17/ld/testsuite/ld-mmix/gregldo1.s
new file mode 100644
index 00000000..a69bd8ca
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/gregpsj1.s b/binutils-2.17/ld/testsuite/ld-mmix/gregpsj1.s
new file mode 100644
index 00000000..87b68a3a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/hdr-1.d b/binutils-2.17/ld/testsuite/ld-mmix/hdr-1.d
new file mode 100644
index 00000000..3cb82654
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-1b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-1b.d
new file mode 100644
index 00000000..3baff9b7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-1f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-1f.d
new file mode 100644
index 00000000..983d2940
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-2b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-2b.d
new file mode 100644
index 00000000..f5940557
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-2f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-2f.d
new file mode 100644
index 00000000..a923e213
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-3b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-3b.d
new file mode 100644
index 00000000..d2f1b509
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-3f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-3f.d
new file mode 100644
index 00000000..4a5e10d4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-4b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-4b.d
new file mode 100644
index 00000000..9d359323
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-4f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-4f.d
new file mode 100644
index 00000000..3c0885bc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-5b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-5b.d
new file mode 100644
index 00000000..b2fcaf49
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-5f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-5f.d
new file mode 100644
index 00000000..bb91e707
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-6b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-6b.d
new file mode 100644
index 00000000..e4ba8cdb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-6f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-6f.d
new file mode 100644
index 00000000..65c4ab02
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-7b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-7b.d
new file mode 100644
index 00000000..202d0065
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-7f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-7f.d
new file mode 100644
index 00000000..b8345e12
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-8b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-8b.d
new file mode 100644
index 00000000..456c9495
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-8f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-8f.d
new file mode 100644
index 00000000..05777ce2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-9b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-9b.d
new file mode 100644
index 00000000..2a639d31
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa-9f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa-9f.d
new file mode 100644
index 00000000..a4a29328
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa.s b/binutils-2.17/ld/testsuite/ld-mmix/jumpa.s
new file mode 100644
index 00000000..16ba54b3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa12b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa12b.d
new file mode 100644
index 00000000..8efe690d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa12f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa12f.d
new file mode 100644
index 00000000..6e2968f9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa13b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa13b.d
new file mode 100644
index 00000000..bda81e3a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa13f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa13f.d
new file mode 100644
index 00000000..335d7ab1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa14b.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa14b.d
new file mode 100644
index 00000000..006e1bdf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/jumpa14f.d b/binutils-2.17/ld/testsuite/ld-mmix/jumpa14f.d
new file mode 100644
index 00000000..bcf75047
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/loc1.d b/binutils-2.17/ld/testsuite/ld-mmix/loc1.d
new file mode 100644
index 00000000..7ecf4915
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/loc1.d
@@ -0,0 +1,22 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/loc1.s b/binutils-2.17/ld/testsuite/ld-mmix/loc1.s
new file mode 100644
index 00000000..d4206508
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/loc1.s
@@ -0,0 +1,3 @@
+ LOC #1000
+loc1 SWYM 3,3,3
+ .global loc1
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/loc1m.d b/binutils-2.17/ld/testsuite/ld-mmix/loc1m.d
new file mode 100644
index 00000000..9721bcbb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/loc2.d b/binutils-2.17/ld/testsuite/ld-mmix/loc2.d
new file mode 100644
index 00000000..c4e8cc9a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/loc2.d
@@ -0,0 +1,24 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/loc2.s b/binutils-2.17/ld/testsuite/ld-mmix/loc2.s
new file mode 100644
index 00000000..1c256938
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/loc2.s
@@ -0,0 +1,3 @@
+ LOC #2000
+loc2 SWYM 3,2,3
+ .global loc2
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/loc2m.d b/binutils-2.17/ld/testsuite/ld-mmix/loc2m.d
new file mode 100644
index 00000000..4d62b242
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/loc3.d b/binutils-2.17/ld/testsuite/ld-mmix/loc3.d
new file mode 100644
index 00000000..7969d001
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/loc3.d
@@ -0,0 +1,24 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/loc3m.d b/binutils-2.17/ld/testsuite/ld-mmix/loc3m.d
new file mode 100644
index 00000000..928ac9ee
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/loc4.d b/binutils-2.17/ld/testsuite/ld-mmix/loc4.d
new file mode 100644
index 00000000..15333de5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/loc4.d
@@ -0,0 +1,31 @@
+#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)
+0+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/loc4m.d b/binutils-2.17/ld/testsuite/ld-mmix/loc4m.d
new file mode 100644
index 00000000..40a4f975
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/loc5.d b/binutils-2.17/ld/testsuite/ld-mmix/loc5.d
new file mode 100644
index 00000000..089c1553
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/loc5m.d b/binutils-2.17/ld/testsuite/ld-mmix/loc5m.d
new file mode 100644
index 00000000..8fedb1c6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/loc6.d b/binutils-2.17/ld/testsuite/ld-mmix/loc6.d
new file mode 100644
index 00000000..030ba6c2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/loc6.d
@@ -0,0 +1,27 @@
+#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)
+0+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/loc6m.d b/binutils-2.17/ld/testsuite/ld-mmix/loc6m.d
new file mode 100644
index 00000000..b2a58a73
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/loc7.d b/binutils-2.17/ld/testsuite/ld-mmix/loc7.d
new file mode 100644
index 00000000..b980f61e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/loc7m.d b/binutils-2.17/ld/testsuite/ld-mmix/loc7m.d
new file mode 100644
index 00000000..be8115ff
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local1.d b/binutils-2.17/ld/testsuite/ld-mmix/local1.d
new file mode 100644
index 00000000..3e8ecaa1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/local1.d
@@ -0,0 +1,53 @@
+#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+150 0+18 5 8 8
+ \[ 5\] \.strtab STRTAB 0+ 0+398
+ 0+32 0+ 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Symbol table '\.symtab' contains 14 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+ 0 SECTION LOCAL DEFAULT 3
+ 4: 0+ 0 SECTION LOCAL DEFAULT 4
+ 5: 0+ 0 SECTION LOCAL DEFAULT 5
+ 6: 0+fd 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 7: 0+fe 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 8: 0+fc 0 NOTYPE GLOBAL DEFAULT PRC\[0xff00\] ext1
+ 9: 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.17/ld/testsuite/ld-mmix/local1.s b/binutils-2.17/ld/testsuite/ld-mmix/local1.s
new file mode 100644
index 00000000..47bf390d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/local1.s
@@ -0,0 +1,2 @@
+ LOCAL ext1
+ SWYM 3,2,1
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/local10.d b/binutils-2.17/ld/testsuite/ld-mmix/local10.d
new file mode 100644
index 00000000..f2764052
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local10m.d b/binutils-2.17/ld/testsuite/ld-mmix/local10m.d
new file mode 100644
index 00000000..9095d747
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local11.d b/binutils-2.17/ld/testsuite/ld-mmix/local11.d
new file mode 100644
index 00000000..761cea0f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local11m.d b/binutils-2.17/ld/testsuite/ld-mmix/local11m.d
new file mode 100644
index 00000000..b6952a79
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local12.d b/binutils-2.17/ld/testsuite/ld-mmix/local12.d
new file mode 100644
index 00000000..2dd1eb40
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local12m.d b/binutils-2.17/ld/testsuite/ld-mmix/local12m.d
new file mode 100644
index 00000000..2cfb701d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local1m.d b/binutils-2.17/ld/testsuite/ld-mmix/local1m.d
new file mode 100644
index 00000000..a5c63e7c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local2.d b/binutils-2.17/ld/testsuite/ld-mmix/local2.d
new file mode 100644
index 00000000..e5ad2037
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local2.s b/binutils-2.17/ld/testsuite/ld-mmix/local2.s
new file mode 100644
index 00000000..9d2c329b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/local2.s
@@ -0,0 +1,2 @@
+ LOCAL 128
+ SWYM 2,2,2
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/local2m.d b/binutils-2.17/ld/testsuite/ld-mmix/local2m.d
new file mode 100644
index 00000000..6e889364
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local3.d b/binutils-2.17/ld/testsuite/ld-mmix/local3.d
new file mode 100644
index 00000000..db545913
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/local3.d
@@ -0,0 +1,51 @@
+#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+150 0+18 5 8 8
+ \[ 5\] \.strtab STRTAB 0+ 0+398
+ 0+32 0+ 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Symbol table '\.symtab' contains 14 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+ 0 SECTION LOCAL DEFAULT 3
+ 4: 0+ 0 SECTION LOCAL DEFAULT 4
+ 5: 0+ 0 SECTION LOCAL DEFAULT 5
+ 6: 0+fd 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 7: 0+fe 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 8: 0+fc 0 NOTYPE GLOBAL DEFAULT ABS ext1
+ 9: 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.17/ld/testsuite/ld-mmix/local3m.d b/binutils-2.17/ld/testsuite/ld-mmix/local3m.d
new file mode 100644
index 00000000..2143d707
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local4.d b/binutils-2.17/ld/testsuite/ld-mmix/local4.d
new file mode 100644
index 00000000..13fa8e60
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local4m.d b/binutils-2.17/ld/testsuite/ld-mmix/local4m.d
new file mode 100644
index 00000000..d18cb20c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local5.d b/binutils-2.17/ld/testsuite/ld-mmix/local5.d
new file mode 100644
index 00000000..37dc0f56
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/local5.d
@@ -0,0 +1,52 @@
+#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+150 0+18 5 8 8
+ \[ 5\] \.strtab STRTAB 0+ 0+398
+ 0+32 0+ 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Symbol table '\.symtab' contains 14 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+ 0 SECTION LOCAL DEFAULT 3
+ 4: 0+ 0 SECTION LOCAL DEFAULT 4
+ 5: 0+ 0 SECTION LOCAL DEFAULT 5
+ 6: 0+fd 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 7: 0+fe 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 8: 0+fc 0 NOTYPE GLOBAL DEFAULT PRC\[0xff00\] ext1
+ 9: 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.17/ld/testsuite/ld-mmix/local5m.d b/binutils-2.17/ld/testsuite/ld-mmix/local5m.d
new file mode 100644
index 00000000..6b4c89b4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local6.d b/binutils-2.17/ld/testsuite/ld-mmix/local6.d
new file mode 100644
index 00000000..b2ed1ed3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local6m.d b/binutils-2.17/ld/testsuite/ld-mmix/local6m.d
new file mode 100644
index 00000000..be64ca2a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local7.d b/binutils-2.17/ld/testsuite/ld-mmix/local7.d
new file mode 100644
index 00000000..2407fcdf
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/local7.d
@@ -0,0 +1,53 @@
+#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+150 0+18 5 8 8
+ \[ 5\] \.strtab STRTAB 0+ 0+398
+ 0+32 0+ 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Symbol table '\.symtab' contains 14 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+ 0 SECTION LOCAL DEFAULT 3
+ 4: 0+ 0 SECTION LOCAL DEFAULT 4
+ 5: 0+ 0 SECTION LOCAL DEFAULT 5
+ 6: 0+fd 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 7: 0+fe 0 NOTYPE LOCAL DEFAULT PRC\[0xff00\] lsym
+ 8: 0+fc 0 NOTYPE GLOBAL DEFAULT ABS ext1
+ 9: 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.17/ld/testsuite/ld-mmix/local7m.d b/binutils-2.17/ld/testsuite/ld-mmix/local7m.d
new file mode 100644
index 00000000..8277a94c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local8.d b/binutils-2.17/ld/testsuite/ld-mmix/local8.d
new file mode 100644
index 00000000..f82e6d04
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local8m.d b/binutils-2.17/ld/testsuite/ld-mmix/local8m.d
new file mode 100644
index 00000000..4e07afef
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local9.d b/binutils-2.17/ld/testsuite/ld-mmix/local9.d
new file mode 100644
index 00000000..cc4f8c7c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/local9m.d b/binutils-2.17/ld/testsuite/ld-mmix/local9m.d
new file mode 100644
index 00000000..78429845
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/locdo-1.d b/binutils-2.17/ld/testsuite/ld-mmix/locdo-1.d
new file mode 100644
index 00000000..2e8409fd
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/locdo-1.d
@@ -0,0 +1,26 @@
+#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)
+0+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/locdo.s b/binutils-2.17/ld/testsuite/ld-mmix/locdo.s
new file mode 100644
index 00000000..34024458
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/locdo.s
@@ -0,0 +1,2 @@
+ LOC Data_Segment+2
+od OCTA od
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/loct-1.d b/binutils-2.17/ld/testsuite/ld-mmix/loct-1.d
new file mode 100644
index 00000000..96b6a145
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/loct-1.d
@@ -0,0 +1,22 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/loct.s b/binutils-2.17/ld/testsuite/ld-mmix/loct.s
new file mode 100644
index 00000000..5aaa406d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/loct.s
@@ -0,0 +1,3 @@
+ LOC #1002
+t SWYM
+ TETRA t
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/locto-1.d b/binutils-2.17/ld/testsuite/ld-mmix/locto-1.d
new file mode 100644
index 00000000..08e66527
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/locto-1.d
@@ -0,0 +1,22 @@
+#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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/locto.s b/binutils-2.17/ld/testsuite/ld-mmix/locto.s
new file mode 100644
index 00000000..5ffa4456
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/locto.s
@@ -0,0 +1,2 @@
+ LOC #1002
+od OCTA od
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/main1.s b/binutils-2.17/ld/testsuite/ld-mmix/main1.s
new file mode 100644
index 00000000..212d1efd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/mmix.exp b/binutils-2.17/ld/testsuite/ld-mmix/mmix.exp
new file mode 100644
index 00000000..96f1ea3f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/mmix.exp
@@ -0,0 +1,32 @@
+# Expect script for ld-mmix tests
+# Copyright 2001 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-mmix/mmohdr1.ld b/binutils-2.17/ld/testsuite/ld-mmix/mmohdr1.ld
new file mode 100644
index 00000000..716c3f42
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/mmosec1.ld b/binutils-2.17/ld/testsuite/ld-mmix/mmosec1.ld
new file mode 100644
index 00000000..4e7e7992
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/mmosec2.ld b/binutils-2.17/ld/testsuite/ld-mmix/mmosec2.ld
new file mode 100644
index 00000000..57025e28
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/nop123.s b/binutils-2.17/ld/testsuite/ld-mmix/nop123.s
new file mode 100644
index 00000000..2d14f43b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pad16.s b/binutils-2.17/ld/testsuite/ld-mmix/pad16.s
new file mode 100644
index 00000000..7692337c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pad2p18m32.s b/binutils-2.17/ld/testsuite/ld-mmix/pad2p18m32.s
new file mode 100644
index 00000000..ede581f0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pad2p26m32.s b/binutils-2.17/ld/testsuite/ld-mmix/pad2p26m32.s
new file mode 100644
index 00000000..05f45c8c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pad4.s b/binutils-2.17/ld/testsuite/ld-mmix/pad4.s
new file mode 100644
index 00000000..49dbe6d4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja.s b/binutils-2.17/ld/testsuite/ld-mmix/pushja.s
new file mode 100644
index 00000000..857ca9d1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja1b-s.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja1b-s.d
new file mode 100644
index 00000000..ac556513
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja1b.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja1b.d
new file mode 100644
index 00000000..b61162f8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja1f-s.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja1f-s.d
new file mode 100644
index 00000000..801ff22c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja1f.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja1f.d
new file mode 100644
index 00000000..5f27400c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja2b.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja2b.d
new file mode 100644
index 00000000..623754f8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja2f.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja2f.d
new file mode 100644
index 00000000..687d5596
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja7b-s.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja7b-s.d
new file mode 100644
index 00000000..7835eda9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja7b.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja7b.d
new file mode 100644
index 00000000..5da05e3b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja7f-s.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja7f-s.d
new file mode 100644
index 00000000..487d54aa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja7f.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja7f.d
new file mode 100644
index 00000000..83721c74
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja8b.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja8b.d
new file mode 100644
index 00000000..da1f2161
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushja8f.d b/binutils-2.17/ld/testsuite/ld-mmix/pushja8f.d
new file mode 100644
index 00000000..8ae45f91
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs1.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs1.d
new file mode 100644
index 00000000..66892e02
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs1b.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs1b.d
new file mode 100644
index 00000000..f9a2491d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs1bm.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs1bm.d
new file mode 100644
index 00000000..d70da894
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs1m.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs1m.d
new file mode 100644
index 00000000..0df80a23
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs1r.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs1r.d
new file mode 100644
index 00000000..30832746
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs2.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs2.d
new file mode 100644
index 00000000..c6b58295
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs2b.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs2b.d
new file mode 100644
index 00000000..a6f22999
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs2bm.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs2bm.d
new file mode 100644
index 00000000..1f37c66b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs2m.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs2m.d
new file mode 100644
index 00000000..8c7af131
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs2r.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs2r.d
new file mode 100644
index 00000000..df181e0b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs3.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs3.d
new file mode 100644
index 00000000..75afe1b6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs3b.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs3b.d
new file mode 100644
index 00000000..33812bbf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs3bm.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs3bm.d
new file mode 100644
index 00000000..f485d146
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs3m.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs3m.d
new file mode 100644
index 00000000..35df726b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs3r.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs3r.d
new file mode 100644
index 00000000..537b3f9d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs4.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs4.d
new file mode 100644
index 00000000..e0104490
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs4b.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs4b.d
new file mode 100644
index 00000000..cef68d78
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs4bm.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs4bm.d
new file mode 100644
index 00000000..53b74f1a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs4m.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs4m.d
new file mode 100644
index 00000000..153e96cc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/pushjs4r.d b/binutils-2.17/ld/testsuite/ld-mmix/pushjs4r.d
new file mode 100644
index 00000000..e734dc67
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/reg-1.d b/binutils-2.17/ld/testsuite/ld-mmix/reg-1.d
new file mode 100644
index 00000000..125fa326
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/reg-1m.d b/binutils-2.17/ld/testsuite/ld-mmix/reg-1m.d
new file mode 100644
index 00000000..73bdb1aa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/reg-2.d b/binutils-2.17/ld/testsuite/ld-mmix/reg-2.d
new file mode 100644
index 00000000..09b0da43
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/reg-2m.d b/binutils-2.17/ld/testsuite/ld-mmix/reg-2m.d
new file mode 100644
index 00000000..f6edbefb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/regext1.s b/binutils-2.17/ld/testsuite/ld-mmix/regext1.s
new file mode 100644
index 00000000..7703905d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/regext1.s
@@ -0,0 +1,2 @@
+ .global ext1
+ext1 IS $252
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/sec-1.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-1.d
new file mode 100644
index 00000000..eab62a2f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-1.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-1.s
new file mode 100644
index 00000000..77e26e3d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-2.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-2.d
new file mode 100644
index 00000000..10623f35
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-2.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-2.s
new file mode 100644
index 00000000..3ac05558
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/sec-2.s
@@ -0,0 +1,2 @@
+ .section .other,"ax"
+ TETRA 12,34,1
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/sec-3.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-3.d
new file mode 100644
index 00000000..2469afab
--- /dev/null
+++ b/binutils-2.17/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 200000000000001c 200000000000001c 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:
+ 200000000000001c 00030d41 000186a2 2628 .*
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/sec-4.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-4.d
new file mode 100644
index 00000000..251f6a28
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-5.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-5.d
new file mode 100644
index 00000000..24aa0e19
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-6.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-6.d
new file mode 100644
index 00000000..5b692e2a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-6.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-6.s
new file mode 100644
index 00000000..7d838839
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-6m.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-6m.d
new file mode 100644
index 00000000..8d12cfbf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-7a.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-7a.s
new file mode 100644
index 00000000..58cc7ab3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-7b.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-7b.s
new file mode 100644
index 00000000..963ca47a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-7c.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-7c.s
new file mode 100644
index 00000000..f6faf85f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-7d.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-7d.s
new file mode 100644
index 00000000..4d73c5f7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-7e.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-7e.s
new file mode 100644
index 00000000..2ffde13e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-7m.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-7m.d
new file mode 100644
index 00000000..0bba4f5c
--- /dev/null
+++ b/binutils-2.17/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:
+ 00004 2a000000 00000000 00000000 00000000 .*
+#...
+ 07ff4 00000000 00000000 00000000 2b2c0000 .*
+#...
+ 0fff4 00000000 00000000 00002d2e 00000000 .*
+#...
+ 17ff4 00000000 00000000 002f3000 00000000 .*
+#...
+ 1fff4 00000000 00000000 00313200 00000000 .*
+#...
+ 27ff4 00000000 00000000 000033[ ]+.*
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/sec-8a.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-8a.s
new file mode 100644
index 00000000..4ac94f77
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-8b.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-8b.s
new file mode 100644
index 00000000..17eb4155
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-8d.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-8d.s
new file mode 100644
index 00000000..0eb5b562
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-8m.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-8m.d
new file mode 100644
index 00000000..fb06b04a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-8m.s b/binutils-2.17/ld/testsuite/ld-mmix/sec-8m.s
new file mode 100644
index 00000000..dc695da2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sec-9.d b/binutils-2.17/ld/testsuite/ld-mmix/sec-9.d
new file mode 100644
index 00000000..4bddc354
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/spec801.d b/binutils-2.17/ld/testsuite/ld-mmix/spec801.d
new file mode 100644
index 00000000..27918e9a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/spec802.d b/binutils-2.17/ld/testsuite/ld-mmix/spec802.d
new file mode 100644
index 00000000..ea0ebc3d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/spec803.d b/binutils-2.17/ld/testsuite/ld-mmix/spec803.d
new file mode 100644
index 00000000..b933d6ca
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/spec804.d b/binutils-2.17/ld/testsuite/ld-mmix/spec804.d
new file mode 100644
index 00000000..170bc5e0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/spec805.d b/binutils-2.17/ld/testsuite/ld-mmix/spec805.d
new file mode 100644
index 00000000..c4cdd02f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/spec806.d b/binutils-2.17/ld/testsuite/ld-mmix/spec806.d
new file mode 100644
index 00000000..7f649489
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/spec807.d b/binutils-2.17/ld/testsuite/ld-mmix/spec807.d
new file mode 100644
index 00000000..f37e57a4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/spec808.d b/binutils-2.17/ld/testsuite/ld-mmix/spec808.d
new file mode 100644
index 00000000..e1d67848
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/start-1.d b/binutils-2.17/ld/testsuite/ld-mmix/start-1.d
new file mode 100644
index 00000000..13fdbdc4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/start-1.d
@@ -0,0 +1,24 @@
+#source: start2.s
+#ld: -m elf64mmix
+#objdump: -td
+
+.*: file format elf64-mmix
+
+SYMBOL TABLE:
+0+ l d \.text 0+ (|\.text)
+0+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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.17/ld/testsuite/ld-mmix/start-2.d b/binutils-2.17/ld/testsuite/ld-mmix/start-2.d
new file mode 100644
index 00000000..e380dc0e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/start.s b/binutils-2.17/ld/testsuite/ld-mmix/start.s
new file mode 100644
index 00000000..b2e3c854
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/start2.s b/binutils-2.17/ld/testsuite/ld-mmix/start2.s
new file mode 100644
index 00000000..33987885
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/start2.s
@@ -0,0 +1,5 @@
+ .text
+ SWYM 1
+ .global _start
+_start:
+ SWYM 2
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/start3.s b/binutils-2.17/ld/testsuite/ld-mmix/start3.s
new file mode 100644
index 00000000..1055870c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/start4.s b/binutils-2.17/ld/testsuite/ld-mmix/start4.s
new file mode 100644
index 00000000..4948d789
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sym-1.d b/binutils-2.17/ld/testsuite/ld-mmix/sym-1.d
new file mode 100644
index 00000000..64d6376a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sym-2.d b/binutils-2.17/ld/testsuite/ld-mmix/sym-2.d
new file mode 100644
index 00000000..61bae320
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/sym-2.s b/binutils-2.17/ld/testsuite/ld-mmix/sym-2.s
new file mode 100644
index 00000000..c8df27ec
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/undef-1.d b/binutils-2.17/ld/testsuite/ld-mmix/undef-1.d
new file mode 100644
index 00000000..fb8c7ee0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/undef-1.s b/binutils-2.17/ld/testsuite/ld-mmix/undef-1.s
new file mode 100644
index 00000000..668cd15a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/undef-1.s
@@ -0,0 +1 @@
+ ADDU regvar,$8,$9
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/undef-1m.d b/binutils-2.17/ld/testsuite/ld-mmix/undef-1m.d
new file mode 100644
index 00000000..001d7f64
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/undef-2.d b/binutils-2.17/ld/testsuite/ld-mmix/undef-2.d
new file mode 100644
index 00000000..52844dba
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/undef-2.s b/binutils-2.17/ld/testsuite/ld-mmix/undef-2.s
new file mode 100644
index 00000000..d912b155
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/undef-2.s
@@ -0,0 +1 @@
+ PUSHJ $5,undefd
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/undef-2m.d b/binutils-2.17/ld/testsuite/ld-mmix/undef-2m.d
new file mode 100644
index 00000000..aa0becc2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/undef-3.d b/binutils-2.17/ld/testsuite/ld-mmix/undef-3.d
new file mode 100644
index 00000000..a17b9687
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/undef-3.d
@@ -0,0 +1,37 @@
+#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+108 0+18 4 5 8
+ \[ 4\] \.strtab STRTAB 0+ 0+2e8
+ 0+2f 0+ 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+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 SECTION LOCAL DEFAULT 4
+ 5: 0+ 0 NOTYPE GLOBAL DEFAULT UND undefd
+ 6: 0+ 0 NOTYPE GLOBAL DEFAULT 1 _start
+ 7: 2000000000000000 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+ 8: 2000000000000000 0 NOTYPE GLOBAL DEFAULT ABS _edata
+ 9: 2000000000000000 0 NOTYPE GLOBAL DEFAULT ABS _end
+ 10: 0+ 0 NOTYPE GLOBAL DEFAULT 1 _start\.
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/undef-3m.d b/binutils-2.17/ld/testsuite/ld-mmix/undef-3m.d
new file mode 100644
index 00000000..08e1df11
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-mmix/x.s b/binutils-2.17/ld/testsuite/ld-mmix/x.s
new file mode 100644
index 00000000..faf4073d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/x.s
@@ -0,0 +1,26 @@
+;# 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. There's the equivalent of an FDE
+;# entry in .eh_frame, referring to fn via a local label.
+
+ .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 .eh_frame,"aw",@progbits
+ .long 2
+ .long L:a
+ .long L:b-L:a
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/y.s b/binutils-2.17/ld/testsuite/ld-mmix/y.s
new file mode 100644
index 00000000..fcfcd352
--- /dev/null
+++ b/binutils-2.17/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
+;# .eh_frame 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 .eh_frame,"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.17/ld/testsuite/ld-mmix/zeroeh.ld b/binutils-2.17/ld/testsuite/ld-mmix/zeroeh.ld
new file mode 100644
index 00000000..6550c17d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-mmix/zeroeh.ld
@@ -0,0 +1,4 @@
+SECTIONS {
+ .text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
+ .eh_frame 0x2000 : { *(.eh_frame) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/zeroehelf.d b/binutils-2.17/ld/testsuite/ld-mmix/zeroehelf.d
new file mode 100644
index 00000000..ba173140
--- /dev/null
+++ b/binutils-2.17/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 \.eh_frame:
+ 2000 00000002 00000a08 00000008 00000007 .*
+ 2010 00000a10 00000004 00006066 00000000 .*
+ 2020 00000004 .*
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-mmix/zeroehmmo.d b/binutils-2.17/ld/testsuite/ld-mmix/zeroehmmo.d
new file mode 100644
index 00000000..2c47ff10
--- /dev/null
+++ b/binutils-2.17/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 \.eh_frame:
+ 2000 00000002 00000a08 00000008 00000007 .*
+ 2010 00000a10 00000004 00006066 00000000 .*
+ 2020 00000004 .*
diff --git a/binutils-2.17/ld/testsuite/ld-pe/pe.exp b/binutils-2.17/ld/testsuite/ld-pe/pe.exp
new file mode 100644
index 00000000..ac38a706
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-pe/pe.exp
@@ -0,0 +1,31 @@
+# Expect script for export table in executables tests
+# Copyright 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This test can only be run on i386 PE/COFF platforms.
+if { ![istarget i*86-*-cygwin*] && ![istarget i*86-*-pe]
+ && ![istarget i*86-*-mingw*] } {
+ return
+}
+
+set pe_tests {
+ {".secrel32" "" "" {secrel1.s secrel2.s}
+ {{objdump -s secrel.d}} "secrel.x"}
+}
+
+run_ld_link_tests $pe_tests
diff --git a/binutils-2.17/ld/testsuite/ld-pe/secrel.d b/binutils-2.17/ld/testsuite/ld-pe/secrel.d
new file mode 100644
index 00000000..93e083f5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-pe/secrel.d
@@ -0,0 +1,27 @@
+
+tmpdir/secrel\.x: file format pei-i386
+
+Contents of section \.text:
+ 401000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ 401010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ 401020 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ 401030 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ 401040 ........ ........ ........ ........ ................
+Contents of section \.data:
+ 402000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ 402010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ 402020 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ 402030 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ 402040 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ 402050 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ 402060 3e3e3e3e 04000000 110d0000 00111600 >>>>............
+ 402070 0000111f 00000011 3c3c3c3c 3c3c3c3c ........<<<<<<<<
+ 402080 3e3e3e3e 24000000 112d0000 00113600 >>>>\$....-....6.
+ 402090 0000113f 00000011 3c3c3c3c 3c3c3c3c ...\?....<<<<<<<<
+Contents of section \.rdata:
+ 403000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<<
+ 403010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>><
+ 403020 3e3e3e3e 00000000 00000000 00000000 >>>>............
+Contents of section \.idata:
+ 404000 00000000 00000000 00000000 00000000 ................
+ 404010 00000000 ....
diff --git a/binutils-2.17/ld/testsuite/ld-pe/secrel1.s b/binutils-2.17/ld/testsuite/ld-pe/secrel1.s
new file mode 100644
index 00000000..c1629901
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-pe/secrel2.s b/binutils-2.17/ld/testsuite/ld-pe/secrel2.s
new file mode 100644
index 00000000..a1f871f0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-pie/pie.c b/binutils-2.17/ld/testsuite/ld-pie/pie.c
new file mode 100644
index 00000000..a9bce4a1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-pie/pie.c
@@ -0,0 +1,5 @@
+int
+main ()
+{
+ return 0;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-pie/pie.exp b/binutils-2.17/ld/testsuite/ld-pie/pie.exp
new file mode 100644
index 00000000..7ab4c815
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-pie/pie.exp
@@ -0,0 +1,40 @@
+# Expect script for various PIE tests.
+# Copyright 2006 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# This 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 -pie $srcdir/$subdir/pie.c -o tmpdir/pie"
+catch "exec $CC -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
diff --git a/binutils-2.17/ld/testsuite/ld-pie/weakundef-data.c b/binutils-2.17/ld/testsuite/ld-pie/weakundef-data.c
new file mode 100644
index 00000000..af411bcc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-pie/weakundef.c b/binutils-2.17/ld/testsuite/ld-pie/weakundef.c
new file mode 100644
index 00000000..c206781a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-pie/weakundef.out b/binutils-2.17/ld/testsuite/ld-pie/weakundef.out
new file mode 100644
index 00000000..53cdf1e9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-pie/weakundef.out
@@ -0,0 +1 @@
+PASSED
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/apuinfo.rd b/binutils-2.17/ld/testsuite/ld-powerpc/apuinfo.rd
new file mode 100644
index 00000000..e6321cd2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/apuinfo.rd
@@ -0,0 +1,10 @@
+#source: apuinfo1.s
+#source: apuinfo2.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.17/ld/testsuite/ld-powerpc/apuinfo1.s b/binutils-2.17/ld/testsuite/ld-powerpc/apuinfo1.s
new file mode 100644
index 00000000..fd42eac0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/apuinfo2.s b/binutils-2.17/ld/testsuite/ld-powerpc/apuinfo2.s
new file mode 100644
index 00000000..7f4e7bba
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/powerpc.exp b/binutils-2.17/ld/testsuite/ld-powerpc/powerpc.exp
new file mode 100644
index 00000000..681bb6e0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/powerpc.exp
@@ -0,0 +1,146 @@
+# Expect script for ld-powerpc tests
+# Copyright 2002, 2003, 2005 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+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}}
+ "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"}
+ }
+ run_ld_link_tests $ppcvxtests
+ run_dump_test "vxworks1-static"
+ return
+}
+
+# powerpc ELF only at the moment.
+
+if { [istarget "*-*-macos*"] || [istarget "*-*-netware*"]
+ || [istarget "*-*-pe"] || [istarget "*-*-winnt*"]
+ || [istarget "*-*-cygwin*"] || [istarget "*-*-aix*"]
+ || [istarget "*-*-beos*"] } {
+ 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 apuinfo2.s}
+ {{readelf -x2 apuinfo.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"}
+ {"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"}
+}
+
+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 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 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 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"}
+ {"sym@tocbase" "-shared -melf64ppc" "-a64" {symtocbase-1.s symtocbase-2.s}
+ {{objdump -dj.data symtocbase.d}} "symtocbase.so"}
+}
+
+
+run_ld_link_tests $ppcelftests
+
+if [ supports_ppc64 ] then {
+ run_ld_link_tests $ppc64elftests
+}
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/reloc.d b/binutils-2.17/ld/testsuite/ld-powerpc/reloc.d
new file mode 100644
index 00000000..1c7eb8a9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/reloc.s b/binutils-2.17/ld/testsuite/ld-powerpc/reloc.s
new file mode 100644
index 00000000..4e66151c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/sdadyn.d b/binutils-2.17/ld/testsuite/ld-powerpc/sdadyn.d
new file mode 100644
index 00000000..42e389ff
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/sdadyn.s b/binutils-2.17/ld/testsuite/ld-powerpc/sdadyn.s
new file mode 100644
index 00000000..1b2d13f7
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/sdadyn.s
@@ -0,0 +1,3 @@
+ .globl _start
+_start:
+ lwz 3,lib_var@sda21(0)
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/sdalib.s b/binutils-2.17/ld/testsuite/ld-powerpc/sdalib.s
new file mode 100644
index 00000000..69b0391d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/symtocbase-1.s b/binutils-2.17/ld/testsuite/ld-powerpc/symtocbase-1.s
new file mode 100644
index 00000000..ba6f0737
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/symtocbase-2.s b/binutils-2.17/ld/testsuite/ld-powerpc/symtocbase-2.s
new file mode 100644
index 00000000..1176cb8a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/symtocbase.d b/binutils-2.17/ld/testsuite/ld-powerpc/symtocbase.d
new file mode 100644
index 00000000..5ffab729
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tls.d b/binutils-2.17/ld/testsuite/ld-powerpc/tls.d
new file mode 100644
index 00000000..abae98ad
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tls.g b/binutils-2.17/ld/testsuite/ld-powerpc/tls.g
new file mode 100644
index 00000000..051ddd18
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tls.s b/binutils-2.17/ld/testsuite/ld-powerpc/tls.s
new file mode 100644
index 00000000..5ad9f3d6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tls.t b/binutils-2.17/ld/testsuite/ld-powerpc/tls.t
new file mode 100644
index 00000000..32a909b6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tls32.d b/binutils-2.17/ld/testsuite/ld-powerpc/tls32.d
new file mode 100644
index 00000000..86fe04ab
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tls32.g b/binutils-2.17/ld/testsuite/ld-powerpc/tls32.g
new file mode 100644
index 00000000..e8c72cc2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tls32.s b/binutils-2.17/ld/testsuite/ld-powerpc/tls32.s
new file mode 100644
index 00000000..1c3092d5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tls32.t b/binutils-2.17/ld/testsuite/ld-powerpc/tls32.t
new file mode 100644
index 00000000..8149a288
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlsexe.d b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.d
new file mode 100644
index 00000000..546daf3d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.d
@@ -0,0 +1,76 @@
+#source: tls.s
+#as: -a64
+#ld: -melf64ppc tmpdir/libtlslib.so
+#objdump: -dr
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Disassembly of section \.text:
+
+.* <_start-0x1c>:
+.* 3d 82 00 00 addis r12,r2,0
+.* f8 41 00 28 std r2,40\(r1\)
+.* e9 6c 80 48 ld r11,-32696\(r12\)
+.* e8 4c 80 50 ld r2,-32688\(r12\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 6c 80 58 ld r11,-32680\(r12\)
+.* 4e 80 04 20 bctr
+
+.* <_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 d5 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 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\)
+.* 7d 89 02 a6 mfctr r12
+.* 78 0b 1f 24 rldicr r11,r0,3,60
+.* 34 40 80 00 addic\. r2,r0,-32768
+.* 7d 8b 60 50 subf r12,r11,r12
+.* 7c 42 fe 76 sradi r2,r2,63
+.* 78 0b 17 64 rldicr r11,r0,2,61
+.* 7c 42 58 38 and r2,r2,r11
+.* 7d 8b 60 50 subf r12,r11,r12
+.* 7d 8c 12 14 add r12,r12,r2
+.* 3d 8c 00 01 addis r12,r12,1
+.* e9 6c 01 c4 ld r11,452\(r12\)
+.* 39 8c 01 c4 addi r12,r12,452
+.* 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
+.* 38 00 00 00 li r0,0
+.* 4b ff ff bc b .*
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.g b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.g
new file mode 100644
index 00000000..6f9aa974
--- /dev/null
+++ b/binutils-2.17/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 100185d0 ffffffff ffff8018 .*
+.* 00000000 00000000 00000000 00000000 .*
+.* 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.r b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.r
new file mode 100644
index 00000000..2e4fab64
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.r
@@ -0,0 +1,116 @@
+#source: tls.s
+#source: tlslib.s
+#as: -a64
+#ld: -melf64ppc
+#readelf: -WSsrl
+#target: powerpc64*-*-*
+
+There are 17 section headers.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +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\] \.text +PROGBITS .* 0+fc 0+ +AX +0 +0 +4
+ +\[ 8\] \.rodata + PROGBITS .* 0+ 0+ +A +0 +0 +8
+ +\[ 9\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[10\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[11\] \.dynamic +DYNAMIC .* 0+150 10 +WA +4 +0 +8
+ +\[12\] \.got +PROGBITS .* 0+30 08 +WA +0 +0 +8
+ +\[13\] \.plt +.*
+ +\[14\] \.shstrtab +.*
+ +\[15\] \.symtab +.*
+ +\[16\] \.strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point .*
+There are 6 program headers.*
+
+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 \.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 \+ 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
+.* FUNC +GLOBAL DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL DEFAULT +UND ld
+.* TLS +GLOBAL DEFAULT +10 ld2
+.* NOTYPE +GLOBAL DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains 40 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
+.* SECTION LOCAL +DEFAULT +14
+.* SECTION LOCAL +DEFAULT +15
+.* SECTION LOCAL +DEFAULT +16
+.* TLS +LOCAL +DEFAULT +9 gd4
+.* TLS +LOCAL +DEFAULT +9 ld4
+.* TLS +LOCAL +DEFAULT +9 ld5
+.* TLS +LOCAL +DEFAULT +9 ld6
+.* TLS +LOCAL +DEFAULT +9 ie4
+.* TLS +LOCAL +DEFAULT +9 le4
+.* TLS +LOCAL +DEFAULT +9 le5
+.* OBJECT +LOCAL +HIDDEN +11 _DYNAMIC
+.* FUNC +LOCAL +DEFAULT +UND \.__tls_get_addr
+.* GLOBAL DEFAULT +UND gd
+.* GLOBAL DEFAULT +10 le0
+.* GLOBAL DEFAULT +UND __tls_get_addr
+.* GLOBAL DEFAULT +10 ld0
+.* GLOBAL DEFAULT +10 le1
+.* GLOBAL DEFAULT +UND ld
+.* NOTYPE +GLOBAL DEFAULT +7 _start
+.* TLS +GLOBAL DEFAULT +10 ld2
+.* TLS +GLOBAL DEFAULT +10 ld1
+.* NOTYPE +GLOBAL DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL DEFAULT +ABS _end
+.* TLS +GLOBAL DEFAULT +10 gd0
+.* TLS +GLOBAL DEFAULT +10 ie0
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.t b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe.t
new file mode 100644
index 00000000..bb512fda
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlsexe32.d b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.d
new file mode 100644
index 00000000..c69e335f
--- /dev/null
+++ b/binutils-2.17/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@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 b4 00 00 00 00 00 00 00 00 .*
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.g b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.g
new file mode 100644
index 00000000..14b7f8cf
--- /dev/null
+++ b/binutils-2.17/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 .*
+.* 018102b4 00000000 00000000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.r b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.r
new file mode 100644
index 00000000..aff95b72
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.r
@@ -0,0 +1,114 @@
+#source: tls32.s
+#source: tlslib32.s
+#as: -a32
+#ld: -melf32ppc
+#readelf: -WSsrl
+#target: powerpc*-*-*
+
+There are 16 section headers.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Addr +Off +Size +ES Flg Lk Inf Al
+ +\[ 0\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[ 1\] \.interp +.*
+ +\[ 2\] \.hash +.*
+ +\[ 3\] \.dynsym +.*
+ +\[ 4\] \.dynstr +.*
+ +\[ 5\] \.rela\.dyn +.*
+ +\[ 6\] \.rela\.plt +.*
+ +\[ 7\] \.text +PROGBITS +[0-9a-f]+ [0-9a-f]+ 000070 00 +AX +0 +0 +1
+ +\[ 8\] \.tdata +PROGBITS +[0-9a-f]+ [0-9a-f]+ 00001c 00 WAT +0 +0 +4
+ +\[ 9\] \.tbss +NOBITS +[0-9a-f]+ [0-9a-f]+ 00001c 00 WAT +0 +0 +4
+ +\[10\] \.dynamic +DYNAMIC +[0-9a-f]+ [0-9a-f]+ [0-9a-f]+ 08 +WA +4 +0 +4
+ +\[11\] \.got +PROGBITS +[0-9a-f]+ [0-9a-f]+ 00001c 04 WAX +0 +0 +4
+ +\[12\] \.plt +NOBITS +.*
+ +\[13\] \.shstrtab +STRTAB +.*
+ +\[14\] \.symtab +SYMTAB +.*
+ +\[15\] \.strtab +STRTAB +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point .*
+There are 6 program headers, starting at offset 52
+
+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 \+ 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
+.* FUNC +GLOBAL DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL DEFAULT +UND ld
+.* NOTYPE +GLOBAL DEFAULT +ABS __end
+.* NOTYPE +GLOBAL DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains 40 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 +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 +HIDDEN +10 _DYNAMIC
+.* OBJECT +LOCAL +HIDDEN +11 _GLOBAL_OFFSET_TABLE_
+.* TLS +GLOBAL DEFAULT +UND gd
+.* TLS +GLOBAL DEFAULT +9 le0
+.* FUNC +GLOBAL DEFAULT +UND __tls_get_addr
+.* 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
+.* 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.17/ld/testsuite/ld-powerpc/tlsexe32.t b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexe32.t
new file mode 100644
index 00000000..2312b333
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlsexetoc.d b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.d
new file mode 100644
index 00000000..7ec07d23
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.d
@@ -0,0 +1,60 @@
+#source: tlstoc.s
+#as: -a64
+#ld: -melf64ppc tmpdir/libtlslib.so
+#objdump: -dr
+#target: powerpc64*-*-*
+
+.*: +file format elf64-powerpc
+
+Disassembly of section \.text:
+
+.* <_start-0x1c>:
+.* 3d 82 00 00 addis r12,r2,0
+.* f8 41 00 28 std r2,40\(r1\)
+.* e9 6c 80 70 ld r11,-32656\(r12\)
+.* e8 4c 80 78 ld r2,-32648\(r12\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 6c 80 80 ld r11,-32640\(r12\)
+.* 4e 80 04 20 bctr
+
+.* <_start>:
+.* 38 62 80 08 addi r3,r2,-32760
+.* 4b ff ff e1 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 18 addi r3,r2,-32744
+.* 4b ff ff d5 bl .*
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 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\)
+.* 7d 89 02 a6 mfctr r12
+.* 78 0b 1f 24 rldicr r11,r0,3,60
+.* 34 40 80 00 addic\. r2,r0,-32768
+.* 7d 8b 60 50 subf r12,r11,r12
+.* 7c 42 fe 76 sradi r2,r2,63
+.* 78 0b 17 64 rldicr r11,r0,2,61
+.* 7c 42 58 38 and r2,r2,r11
+.* 7d 8b 60 50 subf r12,r11,r12
+.* 7d 8c 12 14 add r12,r12,r2
+.* 3d 8c 00 01 addis r12,r12,1
+.* e9 6c 01 ec ld r11,492\(r12\)
+.* 39 8c 01 ec addi r12,r12,492
+.* 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
+.* 38 00 00 00 li r0,0
+.* 4b ff ff bc b .*
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.g b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.g
new file mode 100644
index 00000000..06be9d15
--- /dev/null
+++ b/binutils-2.17/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 10018570 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.17/ld/testsuite/ld-powerpc/tlsexetoc.r b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.r
new file mode 100644
index 00000000..98eda7e5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.r
@@ -0,0 +1,116 @@
+#source: tlslib.s
+#source: tlstoc.s
+#as: -a64
+#ld: -melf64ppc
+#readelf: -WSsrl
+#target: powerpc64*-*-*
+
+There are 17 section headers.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +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\] \.text +PROGBITS .* 0+bc 0+ +AX +0 +0 +4
+ +\[ 8\] \.rodata +PROGBITS .* 0+ 0+ +A +0 +0 +8
+ +\[ 9\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[10\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[11\] \.dynamic +DYNAMIC .* 0+150 10 +WA +4 +0 +8
+ +\[12\] \.got +PROGBITS .* 0+58 08 +WA +0 +0 +8
+ +\[13\] \.plt +.*
+ +\[14\] \.shstrtab +.*
+ +\[15\] \.symtab +.*
+ +\[16\] \.strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point .*
+There are 6 program headers.*
+
+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 \.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 \+ 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
+.* FUNC +GLOBAL DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL DEFAULT +UND ld
+.* NOTYPE +GLOBAL DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL DEFAULT +ABS _end
+
+Symbol table '\.symtab' contains 41 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
+.* SECTION LOCAL +DEFAULT +16
+.* TLS +LOCAL +DEFAULT +9 gd4
+.* TLS +LOCAL +DEFAULT +9 ld4
+.* TLS +LOCAL +DEFAULT +9 ld5
+.* TLS +LOCAL +DEFAULT +9 ld6
+.* TLS +LOCAL +DEFAULT +9 ie4
+.* TLS +LOCAL +DEFAULT +9 le4
+.* TLS +LOCAL +DEFAULT +9 le5
+.* NOTYPE +LOCAL +DEFAULT +12 \.Lie0
+.* OBJECT +LOCAL +HIDDEN +11 _DYNAMIC
+.* FUNC +LOCAL +DEFAULT +UND \.__tls_get_addr
+.* TLS +GLOBAL DEFAULT +UND gd
+.* TLS +GLOBAL DEFAULT +10 le0
+.* FUNC +GLOBAL DEFAULT +UND __tls_get_addr
+.* TLS +GLOBAL DEFAULT +10 ld0
+.* TLS +GLOBAL DEFAULT +10 le1
+.* TLS +GLOBAL DEFAULT +UND ld
+.* NOTYPE +GLOBAL DEFAULT +7 _start
+.* TLS +GLOBAL DEFAULT +10 ld2
+.* TLS +GLOBAL DEFAULT +10 ld1
+.* NOTYPE +GLOBAL DEFAULT +ABS __bss_start
+.* NOTYPE +GLOBAL DEFAULT +ABS _edata
+.* NOTYPE +GLOBAL DEFAULT +ABS _end
+.* TLS +GLOBAL DEFAULT +10 gd0
+.* TLS +GLOBAL DEFAULT +10 ie0
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.t b/binutils-2.17/ld/testsuite/ld-powerpc/tlsexetoc.t
new file mode 100644
index 00000000..10bfaa4c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlslib.s b/binutils-2.17/ld/testsuite/ld-powerpc/tlslib.s
new file mode 100644
index 00000000..08f27a27
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlslib.s
@@ -0,0 +1,21 @@
+ .global .__tls_get_addr,__tls_get_addr,gd,ld
+ .type .__tls_get_addr,@function
+
+ .section ".opd","aw",@progbits
+__tls_get_addr:
+ .align 3
+ .quad .__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
+.__tls_get_addr:
+ blr
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlslib32.s b/binutils-2.17/ld/testsuite/ld-powerpc/tlslib32.s
new file mode 100644
index 00000000..98cd3e91
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlslib32.s
@@ -0,0 +1,14 @@
+ .global __tls_get_addr,gd,ld
+ .type __tls_get_addr,@function
+
+ .section ".tbss","awT",@nobits
+ .align 2
+gd: .space 4
+
+ .section ".tdata","awT",@progbits
+ .align 2
+ld: .long 0xc0ffee
+
+ .text
+__tls_get_addr:
+ blr
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsso.d b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso.d
new file mode 100644
index 00000000..dc4ae182
--- /dev/null
+++ b/binutils-2.17/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:
+
+.* <\.__tls_get_addr>:
+.* 3d 82 00 00 addis r12,r2,0
+.* f8 41 00 28 std r2,40\(r1\)
+.* e9 6c 80 78 ld r11,-32648\(r12\)
+.* e8 4c 80 80 ld r2,-32640\(r12\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 6c 80 88 ld r11,-32632\(r12\)
+.* 4e 80 04 20 bctr
+
+.* <_start>:
+.* 38 62 80 30 addi r3,r2,-32720
+.* 4b ff ff e1 bl .* <\.__tls_get_addr>
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 08 addi r3,r2,-32760
+.* 4b ff ff d5 bl .* <\.__tls_get_addr>
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 48 addi r3,r2,-32696
+.* 4b ff ff c9 bl .* <\.__tls_get_addr>
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 08 addi r3,r2,-32760
+.* 4b ff ff bd bl .* <\.__tls_get_addr>
+.* 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 40 ld r9,-32704\(r2\)
+.* 7d 49 18 2a ldx r10,r9,r3
+.* e9 22 80 58 ld r9,-32680\(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 18 addi r3,r2,-32744
+.* 4b ff ff 89 bl .* <\.__tls_get_addr>
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 08 addi r3,r2,-32760
+.* 4b ff ff 7d bl .* <\.__tls_get_addr>
+.* 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 28 ld r9,-32728\(r2\)
+.* 7d 49 19 2a stdx r10,r9,r3
+.* e9 22 80 58 ld r9,-32680\(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\)
+.* 7d 89 02 a6 mfctr r12
+.* 78 0b 1f 24 rldicr r11,r0,3,60
+.* 34 40 80 00 addic\. r2,r0,-32768
+.* 7d 8b 60 50 subf r12,r11,r12
+.* 7c 42 fe 76 sradi r2,r2,63
+.* 78 0b 17 64 rldicr r11,r0,2,61
+.* 7c 42 58 38 and r2,r2,r11
+.* 7d 8b 60 50 subf r12,r11,r12
+.* 7d 8c 12 14 add r12,r12,r2
+.* 3d 8c 00 01 addis r12,r12,1
+.* e9 6c 01 f4 ld r11,500\(r12\)
+.* 39 8c 01 f4 addi r12,r12,500
+.* 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
+.* 38 00 00 00 li r0,0
+.* 4b ff ff bc b .*
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsso.g b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso.g
new file mode 100644
index 00000000..caef9dd5
--- /dev/null
+++ b/binutils-2.17/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 000187f0 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.17/ld/testsuite/ld-powerpc/tlsso.r b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso.r
new file mode 100644
index 00000000..8501c6fe
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso.r
@@ -0,0 +1,132 @@
+#source: tls.s
+#as: -a64
+#ld: -shared -melf64ppc
+#readelf: -WSsrl
+#target: powerpc64*-*-*
+
+There are 16 section headers.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +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\] \.text .*
+ +\[ 7\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[ 8\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[ 9\] \.data\.rel\.ro .*
+ +\[10\] \.dynamic .*
+ +\[11\] \.got .*
+ +\[12\] \.plt .*
+ +\[13\] \.shstrtab .*
+ +\[14\] \.symtab .*
+ +\[15\] \.strtab .*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are 4 program headers.*
+
+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 \.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+10668 \.tdata \+ 28
+[0-9a-f ]+R_PPC64_TPREL16_HA +0+10668 \.tdata \+ 30
+[0-9a-f ]+R_PPC64_TPREL16_LO +0+10668 \.tdata \+ 30
+[0-9a-f ]+R_PPC64_DTPMOD64 +0+
+[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+ 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 .* entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+.* NOTYPE +LOCAL +DEFAULT +UND
+.* SECTION LOCAL +DEFAULT +6
+.* SECTION LOCAL +DEFAULT +7
+.* SECTION LOCAL +DEFAULT +8
+.* SECTION LOCAL +DEFAULT +9
+.* 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 39 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 +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 +HIDDEN +ABS _DYNAMIC
+.* NOTYPE +LOCAL +DEFAULT +6 \.__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.17/ld/testsuite/ld-powerpc/tlsso.t b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso.t
new file mode 100644
index 00000000..63f92f64
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlsso32.d b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.d
new file mode 100644
index 00000000..45432db3
--- /dev/null
+++ b/binutils-2.17/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 e8 addi r3,r31,-24
+.*: 48 00 00 01 bl .*
+.*: 38 7f ff e0 addi r3,r31,-32
+.*: 48 00 00 01 bl .*
+.*: 38 7f ff f0 addi r3,r31,-16
+.*: 48 01 01 95 bl .*<__tls_get_addr@plt>
+.*: 38 7f ff e0 addi r3,r31,-32
+.*: 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 f8 lwz r9,-8\(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 e0 addi r3,r30,-32
+.*: 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 f8 lwz r9,-8\(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 04 38 .*
+ \.\.\.
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.g b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.g
new file mode 100644
index 00000000..7014419a
--- /dev/null
+++ b/binutils-2.17/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 00010438 00000000 .*
+.* 00000000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.r b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.r
new file mode 100644
index 00000000..c0c120c6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.r
@@ -0,0 +1,133 @@
+#source: tls32.s
+#as: -a32
+#ld: -shared -melf32ppc
+#readelf: -WSsrl
+#target: powerpc*-*-*
+
+There are 15 section headers.*
+
+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\] \.text +PROGBITS .* 0+70 0+ +AX +0 +0 +1
+ +\[ 7\] \.tdata +PROGBITS .* 0+1c 0+ WAT +0 +0 +4
+ +\[ 8\] \.tbss +NOBITS .* 0+1c 0+ WAT +0 +0 +4
+ +\[ 9\] \.dynamic +DYNAMIC .* 08 +WA +3 +0 +4
+ +\[10\] \.got +PROGBITS .* 0+34 04 WAX +0 +0 +4
+ +\[11\] \.plt +.*
+ +\[12\] \.shstrtab +.*
+ +\[13\] \.symtab +.*
+ +\[14\] \.strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are 4 program headers.*
+
+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+1041c +\.tdata \+ 10430
+[0-9a-f ]+R_PPC_TPREL16_HA +0+1041c +\.tdata \+ 10434
+[0-9a-f ]+R_PPC_TPREL16_LO +0+1041c +\.tdata \+ 10434
+[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
+.* SECTION LOCAL +DEFAULT +8
+.* 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 39 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 +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 +HIDDEN +ABS _DYNAMIC
+.* OBJECT +LOCAL +HIDDEN +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.17/ld/testsuite/ld-powerpc/tlsso32.t b/binutils-2.17/ld/testsuite/ld-powerpc/tlsso32.t
new file mode 100644
index 00000000..4190a9a1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlstoc.d b/binutils-2.17/ld/testsuite/ld-powerpc/tlstoc.d
new file mode 100644
index 00000000..cfa8abab
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlstoc.g b/binutils-2.17/ld/testsuite/ld-powerpc/tlstoc.g
new file mode 100644
index 00000000..9ae41005
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlstoc.s b/binutils-2.17/ld/testsuite/ld-powerpc/tlstoc.s
new file mode 100644
index 00000000..5008d89f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlstoc.t b/binutils-2.17/ld/testsuite/ld-powerpc/tlstoc.t
new file mode 100644
index 00000000..5a8129a4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/tlstocso.d b/binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.d
new file mode 100644
index 00000000..0534b3bc
--- /dev/null
+++ b/binutils-2.17/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:
+
+.* <\.__tls_get_addr>:
+.* 3d 82 00 00 addis r12,r2,0
+.* f8 41 00 28 std r2,40\(r1\)
+.* e9 6c 80 70 ld r11,-32656\(r12\)
+.* e8 4c 80 78 ld r2,-32648\(r12\)
+.* 7d 69 03 a6 mtctr r11
+.* e9 6c 80 80 ld r11,-32640\(r12\)
+.* 4e 80 04 20 bctr
+
+.* <_start>:
+.* 38 62 80 08 addi r3,r2,-32760
+.* 4b ff ff e1 bl .* <\.__tls_get_addr>
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 18 addi r3,r2,-32744
+.* 4b ff ff d5 bl .* <\.__tls_get_addr>
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 28 addi r3,r2,-32728
+.* 4b ff ff c9 bl .* <\.__tls_get_addr>
+.* e8 41 00 28 ld r2,40\(r1\)
+.* 38 62 80 38 addi r3,r2,-32712
+.* 4b ff ff bd bl .* <\.__tls_get_addr>
+.* 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\)
+.* 7d 89 02 a6 mfctr r12
+.* 78 0b 1f 24 rldicr r11,r0,3,60
+.* 34 40 80 00 addic\. r2,r0,-32768
+.* 7d 8b 60 50 subf r12,r11,r12
+.* 7c 42 fe 76 sradi r2,r2,63
+.* 78 0b 17 64 rldicr r11,r0,2,61
+.* 7c 42 58 38 and r2,r2,r11
+.* 7d 8b 60 50 subf r12,r11,r12
+.* 7d 8c 12 14 add r12,r12,r2
+.* 3d 8c 00 01 addis r12,r12,1
+.* e9 6c 01 ec ld r11,492\(r12\)
+.* 39 8c 01 ec addi r12,r12,492
+.* 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
+.* 38 00 00 00 li r0,0
+.* 4b ff ff bc b .*
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.g b/binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.g
new file mode 100644
index 00000000..b5d7d647
--- /dev/null
+++ b/binutils-2.17/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 00018738 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.17/ld/testsuite/ld-powerpc/tlstocso.r b/binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.r
new file mode 100644
index 00000000..d63136fa
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.r
@@ -0,0 +1,128 @@
+#source: tlstoc.s
+#as: -a64
+#ld: -shared -melf64ppc
+#readelf: -WSsrl
+#target: powerpc64*-*-*
+
+There are 16 section headers.*
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +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\] \.text .*
+ +\[ 7\] \.tdata +PROGBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[ 8\] \.tbss +NOBITS .* 0+38 0+ WAT +0 +0 +8
+ +\[ 9\] \.data\.rel\.ro .*
+ +\[10\] \.dynamic .*
+ +\[11\] \.got .*
+ +\[12\] \.plt .*
+ +\[13\] \.shstrtab .*
+ +\[14\] \.symtab .*
+ +\[15\] \.strtab .*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x[0-9a-f]+
+There are 4 program headers.*
+
+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 \.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
+.* SECTION LOCAL +DEFAULT +8
+.* SECTION LOCAL +DEFAULT +9
+.* 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 40 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 +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 +HIDDEN +ABS _DYNAMIC
+.* NOTYPE +LOCAL +DEFAULT +6 \.__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.17/ld/testsuite/ld-powerpc/tlstocso.t b/binutils-2.17/ld/testsuite/ld-powerpc/tlstocso.t
new file mode 100644
index 00000000..fe9def45
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/vxworks1-lib.dd b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.dd
new file mode 100644
index 00000000..1c1861eb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/vxworks1-lib.nd b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.nd
new file mode 100644
index 00000000..cbc1c8c4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/vxworks1-lib.rd b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.rd
new file mode 100644
index 00000000..d60e70f7
--- /dev/null
+++ b/binutils-2.17/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
+00090c00 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 00090800 x \+ 0
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.s b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.s
new file mode 100644
index 00000000..9dfcb0fe
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/vxworks1-lib.sd b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-lib.sd
new file mode 100644
index 00000000..1d2ed5c8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/vxworks1-static.d b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1-static.d
new file mode 100644
index 00000000..4c2d1fdc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/vxworks1.dd b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1.dd
new file mode 100644
index 00000000..09e5a6a5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/vxworks1.ld b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1.ld
new file mode 100644
index 00000000..979d7733
--- /dev/null
+++ b/binutils-2.17/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) }
+
+ . = ALIGN (0x10000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x400);
+ .got : { *(.got.plt) *(.got) }
+
+ . = ALIGN (0x400);
+ .bss : { *(.bss) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1.rd b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1.rd
new file mode 100644
index 00000000..27d24045
--- /dev/null
+++ b/binutils-2.17/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 00080820 sglobal \+ 0
+00090410 .*15 R_PPC_JMP_SLOT 00080840 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.17/ld/testsuite/ld-powerpc/vxworks1.s b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks1.s
new file mode 100644
index 00000000..cd54d579
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/vxworks2-static.sd b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks2-static.sd
new file mode 100644
index 00000000..55fc5296
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-powerpc/vxworks2.s b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks2.s
new file mode 100644
index 00000000..5e8d73a8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks2.s
@@ -0,0 +1,5 @@
+ .globl _start
+ .type _start,@function
+_start:
+ blr
+ .end _start
diff --git a/binutils-2.17/ld/testsuite/ld-powerpc/vxworks2.sd b/binutils-2.17/ld/testsuite/ld-powerpc/vxworks2.sd
new file mode 100644
index 00000000..08765688
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/s390.exp b/binutils-2.17/ld/testsuite/ld-s390/s390.exp
new file mode 100644
index 00000000..336b4745
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-s390/s390.exp
@@ -0,0 +1,72 @@
+# Expect script for ld-s390 tests
+# Copyright (C) 2003 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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.17/ld/testsuite/ld-s390/tlsbin.dd b/binutils-2.17/ld/testsuite/ld-s390/tlsbin.dd
new file mode 100644
index 00000000..6e49b1be
--- /dev/null
+++ b/binutils-2.17/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 bc 0,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 bc 0,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 bc 0,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 bc 0,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 bc 0,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 bcr 0,%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 bcr 0,%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 bcr 0,%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 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%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 bcr 0,%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 bcr 0,%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 bcr 0,%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.17/ld/testsuite/ld-s390/tlsbin.rd b/binutils-2.17/ld/testsuite/ld-s390/tlsbin.rd
new file mode 100644
index 00000000..1fa3469c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-s390/tlsbin.rd
@@ -0,0 +1,148 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -m31
+#ld: -shared -melf_s390
+#readelf: -Ssrl
+#target: s390-*-*
+
+There are 16 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+ 00 +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+60 00 WAT +0 +0 +32
+ \[10\] .tbss +NOBITS .* 0+40 00 WAT +0 +0 +1
+ \[11\] .dynamic +DYNAMIC .*
+ \[12\] .got +PROGBITS .*
+ \[13\] .shstrtab .*
+ \[14\] .symtab .*
+ \[15\] .strtab .*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x[0-9a-f]+
+There are 6 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 68 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 +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 HIDDEN +11 _DYNAMIC
+.* OBJECT LOCAL HIDDEN +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.17/ld/testsuite/ld-s390/tlsbin.s b/binutils-2.17/ld/testsuite/ld-s390/tlsbin.s
new file mode 100644
index 00000000..4da50e79
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlsbin.sd b/binutils-2.17/ld/testsuite/ld-s390/tlsbin.sd
new file mode 100644
index 00000000..b1ecbf0f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlsbin.td b/binutils-2.17/ld/testsuite/ld-s390/tlsbin.td
new file mode 100644
index 00000000..f0a61b8d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlsbin_64.dd b/binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.dd
new file mode 100644
index 00000000..664991a9
--- /dev/null
+++ b/binutils-2.17/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 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%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 bcr 0,%r7
diff --git a/binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.rd b/binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.rd
new file mode 100644
index 00000000..34e96495
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.rd
@@ -0,0 +1,148 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#readelf: -Ssrl
+#target: s390x-*-*
+
+There are 16 section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ \[ 0\] +NULL +0+ 0+ 0+ 00 +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+60 00 WAT +0 +0 +32
+ \[10\] .tbss +NOBITS .* 0+40 00 WAT +0 +0 +1
+ \[11\] .dynamic +DYNAMIC .*
+ \[12\] .got +PROGBITS .*
+ \[13\] .shstrtab .*
+ \[14\] .symtab .*
+ \[15\] .strtab .*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x[0-9a-f]+
+There are 6 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 68 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 +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 +HIDDEN +11 _DYNAMIC
+.* OBJECT +LOCAL +HIDDEN +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.17/ld/testsuite/ld-s390/tlsbin_64.s b/binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.s
new file mode 100644
index 00000000..c40fcfc2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlsbin_64.sd b/binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.sd
new file mode 100644
index 00000000..6618e455
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlsbin_64.td b/binutils-2.17/ld/testsuite/ld-s390/tlsbin_64.td
new file mode 100644
index 00000000..dfa7e8dc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlsbinpic.s b/binutils-2.17/ld/testsuite/ld-s390/tlsbinpic.s
new file mode 100644
index 00000000..e52e3a4a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlsbinpic_64.s b/binutils-2.17/ld/testsuite/ld-s390/tlsbinpic_64.s
new file mode 100644
index 00000000..eeda6caa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlslib.s b/binutils-2.17/ld/testsuite/ld-s390/tlslib.s
new file mode 100644
index 00000000..3ec87c22
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlslib_64.s b/binutils-2.17/ld/testsuite/ld-s390/tlslib_64.s
new file mode 100644
index 00000000..3ec87c22
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlspic.dd b/binutils-2.17/ld/testsuite/ld-s390/tlspic.dd
new file mode 100644
index 00000000..6e9da5d4
--- /dev/null
+++ b/binutils-2.17/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 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
diff --git a/binutils-2.17/ld/testsuite/ld-s390/tlspic.rd b/binutils-2.17/ld/testsuite/ld-s390/tlspic.rd
new file mode 100644
index 00000000..c8ddd911
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-s390/tlspic.rd
@@ -0,0 +1,146 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m31
+#ld: -shared -melf_s390
+#readelf: -Ssrl
+#target: s390-*-*
+
+There are 15 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+ 00 +0 +0 0
+ \[ 1\] .hash .*
+ \[ 2\] .dynsym .*
+ \[ 3\] .dynstr .*
+ \[ 4\] .rela.dyn .*
+ \[ 5\] .rela.plt .*
+ \[ 6\] .plt .*
+ \[ 7\] .text +PROGBITS .*
+ \[ 8\] .tdata +PROGBITS .* 0+60 00 WAT 0 +0 32
+ \[ 9\] .tbss +NOBITS .* 0+20 00 WAT 0 +0 1
+ \[10\] .dynamic +DYNAMIC .*
+ \[11\] .got +PROGBITS .*
+ \[12\] .shstrtab .*
+ \[13\] .symtab .*
+ \[14\] .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 .* 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
+.* SECTION LOCAL DEFAULT +9
+.* 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 54 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 +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 HIDDEN +9 sH1
+.* OBJECT LOCAL HIDDEN ABS _DYNAMIC
+.* TLS +LOCAL HIDDEN +8 sh3
+.* TLS +LOCAL HIDDEN +9 sH2
+.* TLS +LOCAL HIDDEN +9 sH7
+.* TLS +LOCAL HIDDEN +8 sh7
+.* TLS +LOCAL HIDDEN +8 sh8
+.* TLS +LOCAL HIDDEN +9 sH4
+.* TLS +LOCAL HIDDEN +8 sh4
+.* TLS +LOCAL HIDDEN +9 sH3
+.* TLS +LOCAL HIDDEN +8 sh5
+.* TLS +LOCAL HIDDEN +9 sH5
+.* TLS +LOCAL HIDDEN +9 sH6
+.* TLS +LOCAL HIDDEN +9 sH8
+.* TLS +LOCAL HIDDEN +8 sh1
+.* OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL HIDDEN +8 sh2
+.* TLS +LOCAL HIDDEN +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.17/ld/testsuite/ld-s390/tlspic.sd b/binutils-2.17/ld/testsuite/ld-s390/tlspic.sd
new file mode 100644
index 00000000..6e32dea3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlspic.td b/binutils-2.17/ld/testsuite/ld-s390/tlspic.td
new file mode 100644
index 00000000..265dbe27
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlspic1.s b/binutils-2.17/ld/testsuite/ld-s390/tlspic1.s
new file mode 100644
index 00000000..28b9c3ae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlspic1_64.s b/binutils-2.17/ld/testsuite/ld-s390/tlspic1_64.s
new file mode 100644
index 00000000..4e500080
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlspic2.s b/binutils-2.17/ld/testsuite/ld-s390/tlspic2.s
new file mode 100644
index 00000000..5513f9b5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlspic2_64.s b/binutils-2.17/ld/testsuite/ld-s390/tlspic2_64.s
new file mode 100644
index 00000000..5513f9b5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlspic_64.dd b/binutils-2.17/ld/testsuite/ld-s390/tlspic_64.dd
new file mode 100644
index 00000000..fea16712
--- /dev/null
+++ b/binutils-2.17/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 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
+ +[0-9a-f]+: 07 07 bcr 0,%r7
diff --git a/binutils-2.17/ld/testsuite/ld-s390/tlspic_64.rd b/binutils-2.17/ld/testsuite/ld-s390/tlspic_64.rd
new file mode 100644
index 00000000..ec6b5a32
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-s390/tlspic_64.rd
@@ -0,0 +1,146 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: -m64 -Aesame
+#ld: -shared -melf64_s390
+#readelf: -WSsrl
+#target: s390x-*-*
+
+There are 15 section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +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+60 00 WAT +0 +0 +32
+ \[ 9\] .tbss +NOBITS .* 0+20 00 WAT +0 +0 +1
+ \[10\] .dynamic +DYNAMIC .*
+ \[11\] .got +PROGBITS .*
+ \[12\] .shstrtab .*
+ \[13\] .symtab .*
+ \[14\] .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 .* 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
+.* SECTION LOCAL DEFAULT +9
+.* 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 54 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 +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 HIDDEN +9 sH1
+.* OBJECT LOCAL HIDDEN ABS _DYNAMIC
+.* TLS +LOCAL HIDDEN +8 sh3
+.* TLS +LOCAL HIDDEN +9 sH2
+.* TLS +LOCAL HIDDEN +9 sH7
+.* TLS +LOCAL HIDDEN +8 sh7
+.* TLS +LOCAL HIDDEN +8 sh8
+.* TLS +LOCAL HIDDEN +9 sH4
+.* TLS +LOCAL HIDDEN +8 sh4
+.* TLS +LOCAL HIDDEN +9 sH3
+.* TLS +LOCAL HIDDEN +8 sh5
+.* TLS +LOCAL HIDDEN +9 sH5
+.* TLS +LOCAL HIDDEN +9 sH6
+.* TLS +LOCAL HIDDEN +9 sH8
+.* TLS +LOCAL HIDDEN +8 sh1
+.* OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL HIDDEN +8 sh2
+.* TLS +LOCAL HIDDEN +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.17/ld/testsuite/ld-s390/tlspic_64.sd b/binutils-2.17/ld/testsuite/ld-s390/tlspic_64.sd
new file mode 100644
index 00000000..267416e1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-s390/tlspic_64.td b/binutils-2.17/ld/testsuite/ld-s390/tlspic_64.td
new file mode 100644
index 00000000..36623bb6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/align.exp b/binutils-2.17/ld/testsuite/ld-scripts/align.exp
new file mode 100644
index 00000000..43369d0b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/align.exp
@@ -0,0 +1,52 @@
+# Test ALIGN in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2004, 2005
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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
+}
+
+# Doesn't work on PECOFF, appears to be a genuine bug
+if [is_pecoff_format] {
+ global target_triplet
+ setup_xfail $target_triplet
+}
+
+if ![ld_simple_link $ld tmpdir/align "-T $srcdir/$subdir/align.t tmpdir/align.o"] {
+ fail $testname
+} else {
+ pass $testname
+}
+
+if ![is_aout_format] {
+ # The z80-coff port defaults to a "binary" like output
+ # file format which does not include a data section.
+ setup_xfail "z80-*-coff"
+ run_dump_test align2a
+ setup_xfail "z80-*-coff"
+ run_dump_test align2b
+}
+run_dump_test align2c
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/align.s b/binutils-2.17/ld/testsuite/ld-scripts/align.s
new file mode 100644
index 00000000..c9bad232
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/align.s
@@ -0,0 +1,2 @@
+ .text
+ .long 0
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/align.t b/binutils-2.17/ld/testsuite/ld-scripts/align.t
new file mode 100644
index 00000000..49d6053a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/align2.t b/binutils-2.17/ld/testsuite/ld-scripts/align2.t
new file mode 100644
index 00000000..d86f62ae
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/align2.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+ .text : {*(.text)}
+ . = ALIGN(data_align);
+ .data : {*(.data)}
+ /DISCARD/ : {*(*)}
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/align2a.d b/binutils-2.17/ld/testsuite/ld-scripts/align2a.d
new file mode 100644
index 00000000..d45cf0e6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/align2a.s b/binutils-2.17/ld/testsuite/ld-scripts/align2a.s
new file mode 100644
index 00000000..4e56d4a8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/align2a.s
@@ -0,0 +1,4 @@
+ .text
+ .long 0
+ .data
+ .long 0x12345678
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/align2b.d b/binutils-2.17/ld/testsuite/ld-scripts/align2b.d
new file mode 100644
index 00000000..05d2a156
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/align2b.s b/binutils-2.17/ld/testsuite/ld-scripts/align2b.s
new file mode 100644
index 00000000..4e56d4a8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/align2b.s
@@ -0,0 +1,4 @@
+ .text
+ .long 0
+ .data
+ .long 0x12345678
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/align2c.d b/binutils-2.17/ld/testsuite/ld-scripts/align2c.d
new file mode 100644
index 00000000..16a4245b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/align2c.d
@@ -0,0 +1,2 @@
+# ld: -T align2.t
+# error: undefined symbol.*in expression
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/align2c.s b/binutils-2.17/ld/testsuite/ld-scripts/align2c.s
new file mode 100644
index 00000000..4e56d4a8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/align2c.s
@@ -0,0 +1,4 @@
+ .text
+ .long 0
+ .data
+ .long 0x12345678
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/assert.exp b/binutils-2.17/ld/testsuite/ld-scripts/assert.exp
new file mode 100644
index 00000000..6bb9b25f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/assert.exp
@@ -0,0 +1,31 @@
+# Test ASSERT in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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.17/ld/testsuite/ld-scripts/assert.s b/binutils-2.17/ld/testsuite/ld-scripts/assert.s
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/assert.s
@@ -0,0 +1 @@
+
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/assert.t b/binutils-2.17/ld/testsuite/ld-scripts/assert.t
new file mode 100644
index 00000000..62aee34e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/assert.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .empty : {}
+ ASSERT (!SIZEOF(.empty), "Empty is not empty")
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/cross1.c b/binutils-2.17/ld/testsuite/ld-scripts/cross1.c
new file mode 100644
index 00000000..56789452
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/cross1.c
@@ -0,0 +1,6 @@
+extern int foo ();
+int
+func ()
+{
+ return foo ();
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/cross1.t b/binutils-2.17/ld/testsuite/ld-scripts/cross1.t
new file mode 100644
index 00000000..c20e4730
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/cross2.c b/binutils-2.17/ld/testsuite/ld-scripts/cross2.c
new file mode 100644
index 00000000..41431771
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/cross2.c
@@ -0,0 +1,5 @@
+int
+foo ()
+{
+ return 1;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/cross2.t b/binutils-2.17/ld/testsuite/ld-scripts/cross2.t
new file mode 100644
index 00000000..a0cdcbb6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/cross3.c b/binutils-2.17/ld/testsuite/ld-scripts/cross3.c
new file mode 100644
index 00000000..1848c32f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/cross3.c
@@ -0,0 +1,7 @@
+int i = 4;
+
+int
+foo ()
+{
+ return i;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/cross3.t b/binutils-2.17/ld/testsuite/ld-scripts/cross3.t
new file mode 100644
index 00000000..5411b9b6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/cross3.t
@@ -0,0 +1,10 @@
+NOCROSSREFS(.nocrossrefs .text)
+
+SECTIONS
+{
+ .text : { *(.text) }
+ .nocrossrefs : { *(.nocrossrefs) }
+ .data : { *(.data) }
+ .bss : { *(.bss) *(COMMON) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/cross4.c b/binutils-2.17/ld/testsuite/ld-scripts/cross4.c
new file mode 100644
index 00000000..aef8dfd1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/cross4.c
@@ -0,0 +1,7 @@
+__attribute__ ((section (".nocrossrefs")))
+static void
+foo ()
+{
+}
+
+void (*dummy) () = foo;
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/crossref.exp b/binutils-2.17/ld/testsuite/ld-scripts/crossref.exp
new file mode 100644
index 00000000..c47e05ff
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/crossref.exp
@@ -0,0 +1,132 @@
+# Test NOCROSSREFS in a linker script.
+# By Ian Lance Taylor, Cygnus Support.
+# Copyright 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+set test1 "NOCROSSREFS 1"
+set test2 "NOCROSSREFS 2"
+set test3 "NOCROSSREFS 3"
+
+if { [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"
+}
+
+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-*-*
+
+verbose -log "$ld $flags -o tmpdir/cross1 -T $srcdir/$subdir/cross1.t tmpdir/cross1.o tmpdir/cross2.o"
+
+catch "exec $ld $flags -o tmpdir/cross1 -T $srcdir/$subdir/cross1.t tmpdir/cross1.o tmpdir/cross2.o" exec_output
+
+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
+}
+
+verbose -log "$ld $flags -o tmpdir/cross2 -T $srcdir/$subdir/cross2.t tmpdir/cross3.o"
+
+catch "exec $ld $flags -o tmpdir/cross2 -T $srcdir/$subdir/cross2.t tmpdir/cross3.o" exec_output
+
+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
+}
+
+verbose -log "$ld $flags -o tmpdir/cross3 -T $srcdir/$subdir/cross3.t tmpdir/cross3-partial.o tmpdir/cross2.o"
+
+catch "exec $ld $flags -o tmpdir/cross3 -T $srcdir/$subdir/cross3.t tmpdir/cross3-partial.o tmpdir/cross2.o" exec_output
+
+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.17/ld/testsuite/ld-scripts/data.d b/binutils-2.17/ld/testsuite/ld-scripts/data.d
new file mode 100644
index 00000000..10b3d085
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/data.exp b/binutils-2.17/ld/testsuite/ld-scripts/data.exp
new file mode 100644
index 00000000..8dd173a3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/data.exp
@@ -0,0 +1,27 @@
+# Test DATA STATEMENT in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# 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.17/ld/testsuite/ld-scripts/data.s b/binutils-2.17/ld/testsuite/ld-scripts/data.s
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/data.s
@@ -0,0 +1 @@
+
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/data.t b/binutils-2.17/ld/testsuite/ld-scripts/data.t
new file mode 100644
index 00000000..f56d10f8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/defined.exp b/binutils-2.17/ld/testsuite/ld-scripts/defined.exp
new file mode 100644
index 00000000..dff238b1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/defined.exp
@@ -0,0 +1,59 @@
+# Test DEFINED in a linker script.
+# By Ian Lance Taylor, Cygnus Support.
+# Copyright 2001, 2003
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+set testname "DEFINED"
+set prms_id 5699
+
+if ![ld_assemble $as $srcdir/$subdir/defined.s tmpdir/def.o] {
+ unresolved $testname
+ return
+}
+
+if ![ld_simple_link $ld tmpdir/def "-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"
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/defined.s b/binutils-2.17/ld/testsuite/ld-scripts/defined.s
new file mode 100644
index 00000000..a364bbbb
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/defined.s
@@ -0,0 +1,2 @@
+ .globl defined
+ defined = 1
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/defined.t b/binutils-2.17/ld/testsuite/ld-scripts/defined.t
new file mode 100644
index 00000000..c1ef1b6a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/defined2.d b/binutils-2.17/ld/testsuite/ld-scripts/defined2.d
new file mode 100644
index 00000000..40728bda
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/defined2.t b/binutils-2.17/ld/testsuite/ld-scripts/defined2.t
new file mode 100644
index 00000000..50ddad0b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/defined3.d b/binutils-2.17/ld/testsuite/ld-scripts/defined3.d
new file mode 100644
index 00000000..61061b68
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/defined3.t b/binutils-2.17/ld/testsuite/ld-scripts/defined3.t
new file mode 100644
index 00000000..1fe6eef5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/dynamic-sections-1.s b/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections-1.s
new file mode 100644
index 00000000..9a72c965
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections-1.s
@@ -0,0 +1,2 @@
+ .data
+ .4byte foo
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections-2.s b/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections-2.s
new file mode 100644
index 00000000..57cb02da
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections-2.s
@@ -0,0 +1,3 @@
+ .data
+ .global foo
+foo: .4byte 0
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections.d b/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections.d
new file mode 100644
index 00000000..279107d5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/dynamic-sections.exp b/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections.exp
new file mode 100644
index 00000000..9aee0cda
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections.exp
@@ -0,0 +1,8 @@
+# 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.17/ld/testsuite/ld-scripts/dynamic-sections.t b/binutils-2.17/ld/testsuite/ld-scripts/dynamic-sections.t
new file mode 100644
index 00000000..f1f24c83
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/empty-aligned.d b/binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.d
new file mode 100644
index 00000000..4b7b84b9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.d
@@ -0,0 +1,13 @@
+#source: empty-aligned.s
+#ld: -T empty-aligned.t
+#readelf: -l --wide
+#xfail: "hppa64-*-*"
+
+#...
+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.17/ld/testsuite/ld-scripts/empty-aligned.exp b/binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.exp
new file mode 100644
index 00000000..17820edf
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.exp
@@ -0,0 +1,26 @@
+# Make sure empty aligned sections do not change output layout.
+# Copyright 2005
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# 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.17/ld/testsuite/ld-scripts/empty-aligned.s b/binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.s
new file mode 100644
index 00000000..2079aa7d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.s
@@ -0,0 +1,2 @@
+ .text
+ .long 123
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.t b/binutils-2.17/ld/testsuite/ld-scripts/empty-aligned.t
new file mode 100644
index 00000000..e59bc203
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/empty-orphan.d b/binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.d
new file mode 100644
index 00000000..1a48cac4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.d
@@ -0,0 +1,3 @@
+#source: empty-orphan.s
+#ld: -T empty-orphan.t
+#error: no memory region specified for loadable section
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.exp b/binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.exp
new file mode 100644
index 00000000..fa845e03
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.exp
@@ -0,0 +1,27 @@
+# Make sure orphan sections do not lead to huge output files.
+# By David Heine, Tensilica, Inc.
+# Copyright 2005
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# PHDRS is only meaningful for ELF.
+if ![is_elf_format] {
+ return
+}
+
+set testname "empty-orphan"
+
+run_dump_test empty-orphan
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.s b/binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.s
new file mode 100644
index 00000000..c8fe675a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/empty-orphan.t b/binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.t
new file mode 100644
index 00000000..efed7617
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/empty-orphan.t
@@ -0,0 +1,21 @@
+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
+ /* .orphan_data is an orphan */
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/map-address.d b/binutils-2.17/ld/testsuite/ld-scripts/map-address.d
new file mode 100644
index 00000000..289b6850
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/map-address.d
@@ -0,0 +1,10 @@
+#...
+Linker script and memory map
+#...
+ *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.17/ld/testsuite/ld-scripts/map-address.exp b/binutils-2.17/ld/testsuite/ld-scripts/map-address.exp
new file mode 100644
index 00000000..504f6c3c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/map-address.exp
@@ -0,0 +1,37 @@
+# Test address printed by --print-map
+# Copyright 2002 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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
+} elseif {[regexp_diff \
+ "tmpdir/map-address.map" \
+ "$srcdir/$subdir/map-address.d"]} {
+ fail $testname
+} else {
+ pass $testname
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/map-address.t b/binutils-2.17/ld/testsuite/ld-scripts/map-address.t
new file mode 100644
index 00000000..8f2dfebe
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/map-address.t
@@ -0,0 +1,9 @@
+SECTIONS
+{
+ . = 0x10001;
+ foo = .;
+ . += 0x200;
+ bar = .;
+ . = ALIGN (4);
+ frob = .;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/memory.t b/binutils-2.17/ld/testsuite/ld-scripts/memory.t
new file mode 100644
index 00000000..8a73c588
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/memory.t
@@ -0,0 +1,39 @@
+MEMORY
+{
+ TEXTMEM (ARX) : ORIGIN = 0x100, LENGTH = 32K
+ DATAMEM (AW) : org = 0x1000, l = (64 * 1024)
+}
+
+SECTIONS
+{
+ . = 0;
+ .text :
+ {
+ /* The value returned by the ORIGIN operator is a constant.
+ However it is being assigned to a symbol declared within
+ a section. Therefore the symbol is section-relative and
+ its value will include the offset of that section from
+ the start of memory. ie the declaration:
+ text_start = ORIGIN (TEXTMEM);
+ here will result in text_start having a value of 0x200.
+ Hence we need to subtract the absolute value of the
+ location counter at this point in order to give text_start
+ a value that is truely absolute, and which coincidentally
+ will allow the tests in script.exp to work. */
+
+ text_start = ORIGIN(TEXTMEM) - ABSOLUTE (.);
+ *(.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.17/ld/testsuite/ld-scripts/overlay-size-map.d b/binutils-2.17/ld/testsuite/ld-scripts/overlay-size-map.d
new file mode 100644
index 00000000..36071694
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/overlay-size-map.d
@@ -0,0 +1,23 @@
+#...
+\.bss1 *0x0*20000 *0x10
+#...
+\.bss2 *0x0*20000 *0x30 load address 0x0*20010
+#...
+\.bss3 *0x0*20000 *0x20 load address 0x0*20040
+#...
+\.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
+#...
+\.data1 *0x0*20260 *0x30 load address 0x0*30100
+#...
+\.data2 *0x0*20260 *0x40 load address 0x0*30130
+#...
+\.data3 *0x0*20260 *0x50 load address 0x0*30170
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/overlay-size.d b/binutils-2.17/ld/testsuite/ld-scripts/overlay-size.d
new file mode 100644
index 00000000..9021aa43
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/overlay-size.d
@@ -0,0 +1,29 @@
+# ld: -T overlay-size.t -Map tmpdir/overlay-size.map
+# name: overlay size
+# objdump: --headers
+#
+# 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.17/ld/testsuite/ld-scripts/overlay-size.exp b/binutils-2.17/ld/testsuite/ld-scripts/overlay-size.exp
new file mode 100644
index 00000000..afcc3468
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/overlay-size.exp
@@ -0,0 +1,31 @@
+# Test the OVERLAY statement.
+# Copyright 2002 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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.17/ld/testsuite/ld-scripts/overlay-size.s b/binutils-2.17/ld/testsuite/ld-scripts/overlay-size.s
new file mode 100644
index 00000000..5428c978
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/overlay-size.t b/binutils-2.17/ld/testsuite/ld-scripts/overlay-size.t
new file mode 100644
index 00000000..f7ffbbbd
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/overlay-size.t
@@ -0,0 +1,57 @@
+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
+
+ .mtext : { *(.mtext) } > TEXTMEM AT > LOADMEM
+
+ .mbss : AT (__load_stop_bss3)
+ {
+ *(.mbss)
+ . += 0x200;
+ } > DATAMEM
+
+ OVERLAY :
+ {
+ .text1 { *(.text1) }
+ .text2 { *(.text2) }
+ .text3 { *(.text3) }
+ } > TEXTMEM AT > LOADMEM
+
+ OVERLAY :
+ {
+ .data1 { *(.data1) }
+ .data2 { *(.data2) }
+ .data3 { *(.data3) }
+ } > DATAMEM AT > LOADMEM
+
+ . = 0x8000;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/phdrs.exp b/binutils-2.17/ld/testsuite/ld-scripts/phdrs.exp
new file mode 100644
index 00000000..67af6ad9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/phdrs.exp
@@ -0,0 +1,61 @@
+# Test PHDRS in a linker script.
+# By Ian Lance Taylor, Cygnus Support.
+# Copyright 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# PHDRS is only meaningful for ELF.
+if ![is_elf_format] {
+ return
+}
+
+# This is a very simplistic test.
+
+set testname "PHDRS"
+
+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-.*"
+}
+
+if ![ld_simple_link $ld tmpdir/phdrs "-T $srcdir/$subdir/phdrs.t tmpdir/phdrs.o"] {
+ fail $testname
+} else {
+ if {[which $objdump] == 0} {
+ unresolved $testname
+ return
+ }
+
+ verbose -log "$objdump --private tmpdir/phdrs"
+ catch "exec $objdump --private tmpdir/phdrs" exec_output
+ 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.17/ld/testsuite/ld-scripts/phdrs.s b/binutils-2.17/ld/testsuite/ld-scripts/phdrs.s
new file mode 100644
index 00000000..ec1f0d17
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/phdrs.s
@@ -0,0 +1,8 @@
+ .text
+
+ .long 1
+
+ .data
+
+ .long 2
+
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/phdrs.t b/binutils-2.17/ld/testsuite/ld-scripts/phdrs.t
new file mode 100644
index 00000000..283e30c6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/phdrs2.exp b/binutils-2.17/ld/testsuite/ld-scripts/phdrs2.exp
new file mode 100644
index 00000000..5fbc2fa4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/phdrs2.exp
@@ -0,0 +1,65 @@
+# Test PHDRS with empty sections in a linker script.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# 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"
+
+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.*"
+
+if ![ld_simple_link $ld tmpdir/phdrs2 "-T $srcdir/$subdir/phdrs2.t tmpdir/phdrs2.o"] {
+ fail $testname
+} else {
+ if {[which $objdump] == 0} {
+ unresolved $testname
+ return
+ }
+
+ verbose -log "$objdump --private tmpdir/phdrs2"
+ catch "exec $objdump --private tmpdir/phdrs2" exec_output
+ 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.17/ld/testsuite/ld-scripts/phdrs2.s b/binutils-2.17/ld/testsuite/ld-scripts/phdrs2.s
new file mode 100644
index 00000000..1e29ddc2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/phdrs2.t b/binutils-2.17/ld/testsuite/ld-scripts/phdrs2.t
new file mode 100644
index 00000000..bccbcecb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/provide-1.d b/binutils-2.17/ld/testsuite/ld-scripts/provide-1.d
new file mode 100644
index 00000000..ac8719a6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/provide-1.s b/binutils-2.17/ld/testsuite/ld-scripts/provide-1.s
new file mode 100644
index 00000000..1e33540f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/provide-1.s
@@ -0,0 +1,4 @@
+ .data
+ .globl foo
+foo: .long 0
+ .p2align 4
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/provide-1.t b/binutils-2.17/ld/testsuite/ld-scripts/provide-1.t
new file mode 100644
index 00000000..6b96b338
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/provide-2.d b/binutils-2.17/ld/testsuite/ld-scripts/provide-2.d
new file mode 100644
index 00000000..e151b306
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/provide-2.s b/binutils-2.17/ld/testsuite/ld-scripts/provide-2.s
new file mode 100644
index 00000000..f9138db9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/provide-2.t b/binutils-2.17/ld/testsuite/ld-scripts/provide-2.t
new file mode 100644
index 00000000..fe30dd85
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/provide-3.d b/binutils-2.17/ld/testsuite/ld-scripts/provide-3.d
new file mode 100644
index 00000000..c8b12daf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/provide-3.s b/binutils-2.17/ld/testsuite/ld-scripts/provide-3.s
new file mode 100644
index 00000000..1e33540f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/provide-3.s
@@ -0,0 +1,4 @@
+ .data
+ .globl foo
+foo: .long 0
+ .p2align 4
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/provide-3.t b/binutils-2.17/ld/testsuite/ld-scripts/provide-3.t
new file mode 100644
index 00000000..f6229d4b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/provide.exp b/binutils-2.17/ld/testsuite/ld-scripts/provide.exp
new file mode 100644
index 00000000..7e2c0e7e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/provide.exp
@@ -0,0 +1,35 @@
+# Test PROVIDE in a linker script.
+# By Nathan Sidwell, CodeSourcery LLC
+# Copyright 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+# 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
+}
+
+run_dump_test provide-1
+run_dump_test provide-2
+setup_xfail *-*-*
+run_dump_test provide-3
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/script.exp b/binutils-2.17/ld/testsuite/ld-scripts/script.exp
new file mode 100644
index 00000000..bf7b1b1d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/script.exp
@@ -0,0 +1,127 @@
+# Test basic linker script functionality
+# By Ian Lance Taylor, Cygnus Support
+# Copyright 1999, 2000, 2001, 2002, 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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 "*-*-mingw32*"] \
+ || [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
+}
+
+
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/script.s b/binutils-2.17/ld/testsuite/ld-scripts/script.s
new file mode 100644
index 00000000..d7b65b0d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/script.t b/binutils-2.17/ld/testsuite/ld-scripts/script.t
new file mode 100644
index 00000000..ee7a48a9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/scriptm.t b/binutils-2.17/ld/testsuite/ld-scripts/scriptm.t
new file mode 100644
index 00000000..57ccae13
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/size-1.d b/binutils-2.17/ld/testsuite/ld-scripts/size-1.d
new file mode 100644
index 00000000..641fbcae
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/size-1.s b/binutils-2.17/ld/testsuite/ld-scripts/size-1.s
new file mode 100644
index 00000000..7f5a5fd4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/size-1.t b/binutils-2.17/ld/testsuite/ld-scripts/size-1.t
new file mode 100644
index 00000000..bb486656
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/size-2.d b/binutils-2.17/ld/testsuite/ld-scripts/size-2.d
new file mode 100644
index 00000000..beb18e41
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/size-2.s b/binutils-2.17/ld/testsuite/ld-scripts/size-2.s
new file mode 100644
index 00000000..6b10250e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/size-2.t b/binutils-2.17/ld/testsuite/ld-scripts/size-2.t
new file mode 100644
index 00000000..e67b3fa8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/size.exp b/binutils-2.17/ld/testsuite/ld-scripts/size.exp
new file mode 100644
index 00000000..49405cb8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/size.exp
@@ -0,0 +1,38 @@
+# Expect script for SIZEOF tests
+# Copyright (C) 2004 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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.17/ld/testsuite/ld-scripts/sizeof.exp b/binutils-2.17/ld/testsuite/ld-scripts/sizeof.exp
new file mode 100644
index 00000000..b9b28f29
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sizeof.exp
@@ -0,0 +1,71 @@
+# 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
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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.17/ld/testsuite/ld-scripts/sizeof.s b/binutils-2.17/ld/testsuite/ld-scripts/sizeof.s
new file mode 100644
index 00000000..e221ca3c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sizeof.s
@@ -0,0 +1 @@
+ .space 16
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sizeof.t b/binutils-2.17/ld/testsuite/ld-scripts/sizeof.t
new file mode 100644
index 00000000..6244a37b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/sort.exp b/binutils-2.17/ld/testsuite/ld-scripts/sort.exp
new file mode 100644
index 00000000..3e523e0d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort.exp
@@ -0,0 +1,31 @@
+# Test SORT_BY_NAME/SORT_BY_ALIGNMENT/SORT in a linker script.
+# By H.J. Lu <hongjiu.lu@intel.com>
+# Copyright 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# FIXME: The expected outputs are correct only for ELF.
+if ![is_elf_format] {
+ 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.17/ld/testsuite/ld-scripts/sort_b_a.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a.d
new file mode 100644
index 00000000..78fe1f10
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a.d
@@ -0,0 +1,9 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a.s b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a.s
new file mode 100644
index 00000000..7b3851f8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/sort_b_a.t b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a.t
new file mode 100644
index 00000000..cbfd3c3a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(SORT_BY_ALIGNMENT(.text*))}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-1.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-1.d
new file mode 100644
index 00000000..4f70646c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-1.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-2.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-2.d
new file mode 100644
index 00000000..65919a44
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-2.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-3.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-3.d
new file mode 100644
index 00000000..21b7732c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a-3.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a.t b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_a.t
new file mode 100644
index 00000000..359cdffd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/sort_b_a_n-1.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-1.d
new file mode 100644
index 00000000..62363bcf
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-1.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-2.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-2.d
new file mode 100644
index 00000000..74028362
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-2.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-3.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-3.d
new file mode 100644
index 00000000..4421c77f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n-3.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n.t b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_a_n.t
new file mode 100644
index 00000000..04c3917b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/sort_b_n.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n.d
new file mode 100644
index 00000000..531a756c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n.d
@@ -0,0 +1,9 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n.s b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n.s
new file mode 100644
index 00000000..c99d75c6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/sort_b_n.t b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n.t
new file mode 100644
index 00000000..26c2b6ea
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(SORT_BY_NAME(.text*))}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-1.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-1.d
new file mode 100644
index 00000000..ee123bf6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-1.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-2.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-2.d
new file mode 100644
index 00000000..82f18053
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-2.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-3.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-3.d
new file mode 100644
index 00000000..5f3c8632
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a-3.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a.t b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_a.t
new file mode 100644
index 00000000..49cbdd36
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/sort_b_n_n-1.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-1.d
new file mode 100644
index 00000000..0bc18aef
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-1.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-2.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-2.d
new file mode 100644
index 00000000..834bf90f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-2.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-3.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-3.d
new file mode 100644
index 00000000..7ba8a8b0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n-3.d
@@ -0,0 +1,14 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n.t b/binutils-2.17/ld/testsuite/ld-scripts/sort_b_n_n.t
new file mode 100644
index 00000000..b4eabfe2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/sort_n_a-a.s b/binutils-2.17/ld/testsuite/ld-scripts/sort_n_a-a.s
new file mode 100644
index 00000000..77dfc35e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/sort_n_a-b.s b/binutils-2.17/ld/testsuite/ld-scripts/sort_n_a-b.s
new file mode 100644
index 00000000..781ba4ec
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/sort_no-1.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_no-1.d
new file mode 100644
index 00000000..aef78639
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_no-1.d
@@ -0,0 +1,9 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_no-2.d b/binutils-2.17/ld/testsuite/ld-scripts/sort_no-2.d
new file mode 100644
index 00000000..ddcd1c10
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_no-2.d
@@ -0,0 +1,9 @@
+#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
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/sort_no.t b/binutils-2.17/ld/testsuite/ld-scripts/sort_no.t
new file mode 100644
index 00000000..d797c796
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/sort_no.t
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .text : {*(.text*)}
+ /DISCARD/ : { *(.*) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/weak.exp b/binutils-2.17/ld/testsuite/ld-scripts/weak.exp
new file mode 100644
index 00000000..925c812c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-scripts/weak.exp
@@ -0,0 +1,69 @@
+# Test weak symbols.
+# By Ian Lance Taylor, Cygnus Solutions.
+# Copyright 1999, 2000, 2002, 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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*
+}
+
+# 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
+}
+
+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 {[which $objdump] == 0} then {
+ unresolved $testname
+ return
+ }
+
+ verbose -log "$objdump -s tmpdir/weak"
+ catch "exec $objdump -s tmpdir/weak" exec_output
+ 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
+ }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-scripts/weak.t b/binutils-2.17/ld/testsuite/ld-scripts/weak.t
new file mode 100644
index 00000000..6cd013e1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/weak1.s b/binutils-2.17/ld/testsuite/ld-scripts/weak1.s
new file mode 100644
index 00000000..26bffbd6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-scripts/weak2.s b/binutils-2.17/ld/testsuite/ld-scripts/weak2.s
new file mode 100644
index 00000000..963b2297
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-selective/1.c b/binutils-2.17/ld/testsuite/ld-selective/1.c
new file mode 100644
index 00000000..12023677
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-selective/2.c b/binutils-2.17/ld/testsuite/ld-selective/2.c
new file mode 100644
index 00000000..72958876
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-selective/3.cc b/binutils-2.17/ld/testsuite/ld-selective/3.cc
new file mode 100644
index 00000000..c40bf355
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-selective/4.cc b/binutils-2.17/ld/testsuite/ld-selective/4.cc
new file mode 100644
index 00000000..f4fc21ca
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-selective/5.cc b/binutils-2.17/ld/testsuite/ld-selective/5.cc
new file mode 100644
index 00000000..2c974d99
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-selective/keepdot.d b/binutils-2.17/ld/testsuite/ld-selective/keepdot.d
new file mode 100644
index 00000000..aadd5d44
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-selective/keepdot.ld b/binutils-2.17/ld/testsuite/ld-selective/keepdot.ld
new file mode 100644
index 00000000..d8a2b386
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-selective/keepdot.ld
@@ -0,0 +1,5 @@
+SECTIONS
+{
+ .myinit : { KEEP (*(.myinit)) }
+ .mytext : { *(.mytext*) *(.text*) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-selective/keepdot.s b/binutils-2.17/ld/testsuite/ld-selective/keepdot.s
new file mode 100644
index 00000000..42176e22
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-selective/keepdot0.d b/binutils-2.17/ld/testsuite/ld-selective/keepdot0.d
new file mode 100644
index 00000000..4432a011
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-selective/keepdot0.ld b/binutils-2.17/ld/testsuite/ld-selective/keepdot0.ld
new file mode 100644
index 00000000..9f053d3c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-selective/keepdot0.ld
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ . = 0x0;
+ .myinit : { KEEP (*(.myinit)) }
+ .mytext : { *(.mytext*) *(.text*) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-selective/sel-dump.exp b/binutils-2.17/ld/testsuite/ld-selective/sel-dump.exp
new file mode 100644
index 00000000..63f246c2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-selective/sel-dump.exp
@@ -0,0 +1,32 @@
+# Expect script for ld selective linking tests running run_dump_test
+# Copyright 2002, 2004 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# 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*-*" "arc*-*" "d30v*-*" "dlx*-*" "hppa64-*-*"
+ setup_xfail "i370*-*" "i860*-*" "i960*-*" "ia64*-*" "mn10200-*"
+ setup_xfail "or32-*" "pj-*"
+ run_dump_test [file rootname [lindex $test_list $i]]
+}
diff --git a/binutils-2.17/ld/testsuite/ld-selective/selective.exp b/binutils-2.17/ld/testsuite/ld-selective/selective.exp
new file mode 100644
index 00000000..fcc2f39b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-selective/selective.exp
@@ -0,0 +1,213 @@
+# Expect script for LD selective linking tests
+# Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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
+}
+
+# Alpha and IA64 do not support selective linking
+if {[istarget "alpha*-*-*"] || [istarget "ia64-*-*"]} {
+ 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} {mips*-*}}
+ {selective3 C 2.c {-u foo} {foo} {{foo 0}} {mips*-*}}
+ {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 "-fvtable-gc -fno-exceptions -fno-rtti"
+set ldflags "--gc-sections -Bstatic"
+
+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 { [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 testflags "$cflags $cxxflags"
+ if [string match "*gcc*" [lindex $CC 0]] {
+ # 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.
+ catch "exec -- $CC -dumpversion" version
+ if [regexp "^(\[1-9\]\[0-9\]+|\[4-9\]|3.(\[1-9\]\[0-9\]+|\[4-9\]))\\." $version] {
+ setup_xfail {*-*-*}
+ }
+ }
+ } {
+ set testflags "$cflags"
+ }
+
+ # 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 "$CC $testflags" $srcdir/$subdir/$testfile $objfile] } {
+ unresolved $testname
+ continue
+ }
+
+ # V850 targets need libgcc.a
+ if [istarget v850*-*-elf] {
+ catch "exec $CC -print-libgcc-file-name" 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-*-*]} {
+ catch "exec $CC -print-libgcc-file-name" libgcc
+ set objfile "$objfile $libgcc"
+ }
+
+ # HPPA linux targets need libgcc.a for millicode routines ($$dyncall).
+ if [istarget hppa*-*-linux*] {
+ catch "exec $CC -print-libgcc-file-name" 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.17/ld/testsuite/ld-sh/arch/arch.exp b/binutils-2.17/ld/testsuite/ld-sh/arch/arch.exp
new file mode 100644
index 00000000..7195f568
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/arch.exp
@@ -0,0 +1,251 @@
+# Copyright (C) 2004, 2005
+# 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 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]
+
+ # 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 {
+ 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.17/ld/testsuite/ld-sh/arch/arch_expected.txt b/binutils-2.17/ld/testsuite/ld-sh/arch/arch_expected.txt
new file mode 100644
index 00000000..69916df8
--- /dev/null
+++ b/binutils-2.17/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 sh3-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 sh3
+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 sh3
+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 sh3
+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 sh4-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 ERROR
+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 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 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 ERROR
+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 sh3e
+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
+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-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 sh3-dsp
+sh-unknown.o sh.o sh3
+sh-unknown.o sh2.o sh3
+sh-unknown.o sh2a-nofpu-or-sh3-nommu.o sh3
+sh-unknown.o sh2a-nofpu-or-sh4-nommu-nofpu.o sh4-nofpu
+sh-unknown.o sh2a-nofpu.o ERROR
+sh-unknown.o sh2a-or-sh3e.o sh3e
+sh-unknown.o sh2a-or-sh4.o sh4
+sh-unknown.o sh2a.o ERROR
+sh-unknown.o sh2e.o sh3e
+sh-unknown.o sh3-dsp.o sh3-dsp
+sh-unknown.o sh3-nommu.o sh3
+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-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 sh3
diff --git a/binutils-2.17/ld/testsuite/ld-sh/arch/sh-dsp.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh-dsp.s
new file mode 100644
index 00000000..03b71fee
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh-dsp.s
@@ -0,0 +1,270 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh.s
new file mode 100644
index 00000000..cad2da17
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh.s
@@ -0,0 +1,153 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh2.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2.s
new file mode 100644
index 00000000..66896f07
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2.s
@@ -0,0 +1,164 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s
new file mode 100644
index 00000000..b5c13c33
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh3-nommu.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 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s
new file mode 100644
index 00000000..392b60b3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s
@@ -0,0 +1,167 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh2a-nofpu.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-nofpu.s
new file mode 100644
index 00000000..b3b06ed5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-nofpu.s
@@ -0,0 +1,219 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh2a-or-sh3e.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-or-sh3e.s
new file mode 100644
index 00000000..5542c49e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-or-sh3e.s
@@ -0,0 +1,203 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh2a-or-sh4.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-or-sh4.s
new file mode 100644
index 00000000..497ad048
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a-or-sh4.s
@@ -0,0 +1,231 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh2a.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a.s
new file mode 100644
index 00000000..70fa023b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2a.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 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh2e.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2e.s
new file mode 100644
index 00000000..75a11ad3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh2e.s
@@ -0,0 +1,200 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh3-dsp.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh3-dsp.s
new file mode 100644
index 00000000..3837193d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh3-dsp.s
@@ -0,0 +1,285 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh3-nommu.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh3-nommu.s
new file mode 100644
index 00000000..346ffe60
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh3-nommu.s
@@ -0,0 +1,178 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh3.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh3.s
new file mode 100644
index 00000000..2fff52b5
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh3.s
@@ -0,0 +1,179 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh3e.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh3e.s
new file mode 100644
index 00000000..6fcd0649
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh3e.s
@@ -0,0 +1,216 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh4-nofpu.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4-nofpu.s
new file mode 100644
index 00000000..d71b0df4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4-nofpu.s
@@ -0,0 +1,192 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s
new file mode 100644
index 00000000..1caf830d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s
@@ -0,0 +1,191 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh4.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4.s
new file mode 100644
index 00000000..0044f274
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4.s
@@ -0,0 +1,261 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh4a-nofpu.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4a-nofpu.s
new file mode 100644
index 00000000..7c2850b4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4a-nofpu.s
@@ -0,0 +1,199 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh4a.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4a.s
new file mode 100644
index 00000000..a56c8e72
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4a.s
@@ -0,0 +1,269 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/arch/sh4al-dsp.s b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4al-dsp.s
new file mode 100644
index 00000000..c2b4087e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/arch/sh4al-dsp.s
@@ -0,0 +1,341 @@
+! 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}
+ 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}
+ 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.17/ld/testsuite/ld-sh/ld-r-1.d b/binutils-2.17/ld/testsuite/ld-sh/ld-r-1.d
new file mode 100644
index 00000000..7bcd479c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/ld-r-1.d
@@ -0,0 +1,23 @@
+#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 0000000c 00090009 00090009 .*
+
+Hex dump of section '\.rela\.text':
+ 0x00000000 00000000 00000101 00000008 .*
diff --git a/binutils-2.17/ld/testsuite/ld-sh/ldr1.s b/binutils-2.17/ld/testsuite/ld-sh/ldr1.s
new file mode 100644
index 00000000..9f493891
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/ldr1.s
@@ -0,0 +1,5 @@
+ .text
+ nop
+ nop
+ nop
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-sh/ldr2.s b/binutils-2.17/ld/testsuite/ld-sh/ldr2.s
new file mode 100644
index 00000000..94e06585
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/ldr2.s
@@ -0,0 +1,3 @@
+ .text
+ .long bar
+bar:
diff --git a/binutils-2.17/ld/testsuite/ld-sh/rd-sh.exp b/binutils-2.17/ld/testsuite/ld-sh/rd-sh.exp
new file mode 100644
index 00000000..926251ba
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/rd-sh.exp
@@ -0,0 +1,64 @@
+# Expect script for run_dump_test based ld-sh tests.
+# Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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]
+ 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.17/ld/testsuite/ld-sh/refdbg-0-dso.d b/binutils-2.17/ld/testsuite/ld-sh/refdbg-0-dso.d
new file mode 100644
index 00000000..c38fe3e9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/refdbg-0-dso.d
@@ -0,0 +1,9 @@
+#source: refdbglib.s
+#as: -little
+#ld: -shared -EL
+#objdump: -drj.text
+#target: sh*-*-linux* sh*-*-netbsd*
+
+.*: +file format elf32-sh.*
+
+#pass
diff --git a/binutils-2.17/ld/testsuite/ld-sh/refdbg-1.d b/binutils-2.17/ld/testsuite/ld-sh/refdbg-1.d
new file mode 100644
index 00000000..461788e2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/refdbg.s b/binutils-2.17/ld/testsuite/ld-sh/refdbg.s
new file mode 100644
index 00000000..268fa161
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/refdbglib.s b/binutils-2.17/ld/testsuite/ld-sh/refdbglib.s
new file mode 100644
index 00000000..31244acd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh.exp b/binutils-2.17/ld/testsuite/ld-sh/sh.exp
new file mode 100644
index 00000000..5d3d5d4d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh.exp
@@ -0,0 +1,163 @@
+# Expect script for ld-sh tests
+# Copyright 1995, 1996, 1997, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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-*] {
+ # This target needs the explicit entry address.
+ 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"
+ 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.17/ld/testsuite/ld-sh/sh1.s b/binutils-2.17/ld/testsuite/ld-sh/sh1.s
new file mode 100644
index 00000000..d18e4390
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh2.c b/binutils-2.17/ld/testsuite/ld-sh/sh2.c
new file mode 100644
index 00000000..527fe88c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/abi32.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/abi32.sd
new file mode 100644
index 00000000..8b22e46e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/abi32.xd b/binutils-2.17/ld/testsuite/ld-sh/sh64/abi32.xd
new file mode 100644
index 00000000..03f1b01c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/abi32.xd
@@ -0,0 +1,48 @@
+
+.*: 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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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 \*ABS\* 0+ ___dtors
+0+105c g \.text 0+ 0x04 xyzzy
+0+1100 g \*ABS\* 0+ __bss_start
+0+10e8 g \*ABS\* 0+ ___ctors_end
+0+10f0 g \.data 0+ baz2
+0+10e8 g \*ABS\* 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 \*ABS\* 0+ ___dtors_end
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/abi64.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/abi64.sd
new file mode 100644
index 00000000..ff267409
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/abi64.xd b/binutils-2.17/ld/testsuite/ld-sh/sh64/abi64.xd
new file mode 100644
index 00000000..fdfafb09
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/abi64.xd
@@ -0,0 +1,47 @@
+.*: 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)
+0000000000000000 l d \*ABS\* 0000000000000000 (|\.shstrtab)
+0000000000000000 l d \*ABS\* 0000000000000000 (|\.symtab)
+0000000000000000 l d \*ABS\* 0000000000000000 (|\.strtab)
+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 \*ABS\* 0000000000000000 ___dtors
+00000000000010a4 g \.text 0000000000000000 0x04 xyzzy
+0000000000001148 g \*ABS\* 0000000000000000 __bss_start
+0000000000001130 g \*ABS\* 0000000000000000 ___ctors_end
+0000000000001138 g \.data 0000000000000000 baz2
+0000000000001130 g \*ABS\* 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 \*ABS\* 0000000000000000 ___dtors_end
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/abixx-noexp.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/abixx-noexp.sd
new file mode 100644
index 00000000..ce111569
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/cmpct1.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/cmpct1.sd
new file mode 100644
index 00000000..1f7e8a1a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/cmpct1.xd b/binutils-2.17/ld/testsuite/ld-sh/sh64/cmpct1.xd
new file mode 100644
index 00000000..e1beb14f
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/cmpct1.xd
@@ -0,0 +1,39 @@
+
+.*: 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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+0+1004 l \.text 0+ next
+0+100c l \.rodata 0+ here
+0+1098 g \*ABS\* 0+ ___dtors
+0+1098 g \*ABS\* 0+ __bss_start
+0+1098 g \*ABS\* 0+ ___ctors_end
+0+1098 g \*ABS\* 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 \*ABS\* 0+ ___dtors_end
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-1.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-1.s
new file mode 100644
index 00000000..5dfae882
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange-2a.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2a.s
new file mode 100644
index 00000000..9af6bbe2
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange-2b.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2b.s
new file mode 100644
index 00000000..670a4482
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange-2c.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2c.s
new file mode 100644
index 00000000..fcc350d7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange-2d.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2d.s
new file mode 100644
index 00000000..11f3d5b6
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange-2e.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2e.s
new file mode 100644
index 00000000..3d7c997e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange-2f.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2f.s
new file mode 100644
index 00000000..a8479c9a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange-2g.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2g.s
new file mode 100644
index 00000000..ac7aacb3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange-2h.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2h.s
new file mode 100644
index 00000000..99c6146c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange-2i.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange-2i.s
new file mode 100644
index 00000000..78c1ce9b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange1.rd b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange1.rd
new file mode 100644
index 00000000..52b7bd19
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange1.rd
@@ -0,0 +1,51 @@
+.*
+
+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:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+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
+.*: 00000000 0 SECTION LOCAL DEFAULT 5
+.*: 00000000 0 SECTION LOCAL DEFAULT 6
+.*: 00000000 0 SECTION LOCAL DEFAULT 7
+.*: 00001004 0 NOTYPE LOCAL DEFAULT 2 start2
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS ___dtors
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 00001004 0 NOTYPE GLOBAL DEFAULT 2 diversion2
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS _edata
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS _end
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
+.*: 000010a0 0 NOTYPE GLOBAL DEFAULT ABS ___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.17/ld/testsuite/ld-sh/sh64/crange2.rd b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange2.rd
new file mode 100644
index 00000000..dac8f9b1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange2.rd
@@ -0,0 +1,59 @@
+.*
+
+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:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+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
+.*: 00000000 0 SECTION LOCAL DEFAULT 5
+.*: 00000000 0 SECTION LOCAL DEFAULT 6
+.*: 00000000 0 SECTION LOCAL DEFAULT 7
+.*: 00001004 0 NOTYPE LOCAL DEFAULT 2 start2
+.*: 0000101c 0 NOTYPE LOCAL DEFAULT 2 sec1
+.*: 0000102c 0 NOTYPE LOCAL DEFAULT 2 sec2
+.*: 00001040 0 NOTYPE LOCAL DEFAULT 2 sec3
+.*: 00001048 0 NOTYPE LOCAL DEFAULT 2 sec4
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS ___dtors
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 00001004 0 NOTYPE GLOBAL DEFAULT 2 diversion2
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS _edata
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS _end
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
+.*: 000010e0 0 NOTYPE GLOBAL DEFAULT ABS ___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.17/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd
new file mode 100644
index 00000000..674a9133
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange3-cmpct.rd
@@ -0,0 +1,82 @@
+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:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+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
+.*: 00000000 0 SECTION LOCAL DEFAULT 5
+.*: 00000000 0 SECTION LOCAL DEFAULT 6
+.*: 00000000 0 SECTION LOCAL DEFAULT 7
+.*: 00001004 0 NOTYPE LOCAL DEFAULT 2 sec4
+.*: 000010a4 0 NOTYPE LOCAL DEFAULT 2 start2
+.*: 000010bc 0 NOTYPE LOCAL DEFAULT 2 sec3
+.*: 000010c4 0 NOTYPE GLOBAL DEFAULT 2 diversion
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___dtors
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 000010a4 0 NOTYPE GLOBAL DEFAULT 2 diversion2
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _edata
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _end
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___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.17/ld/testsuite/ld-sh/sh64/crange3-media.rd b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange3-media.rd
new file mode 100644
index 00000000..c5f2be44
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange3-media.rd
@@ -0,0 +1,82 @@
+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:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+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
+.*: 00000000 0 SECTION LOCAL DEFAULT 5
+.*: 00000000 0 SECTION LOCAL DEFAULT 6
+.*: 00000000 0 SECTION LOCAL DEFAULT 7
+.*: 00001004 0 NOTYPE LOCAL DEFAULT 2 sec4
+.*: 000010a4 0 NOTYPE LOCAL DEFAULT 2 start2
+.*: 000010bc 0 NOTYPE LOCAL DEFAULT 2 sec3
+.*: 000010c4 0 NOTYPE GLOBAL DEFAULT 2 diversion
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___dtors
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 000010a4 0 NOTYPE GLOBAL DEFAULT 2 diversion2
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _edata
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _end
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___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.17/ld/testsuite/ld-sh/sh64/crange3.dd b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange3.dd
new file mode 100644
index 00000000..135f1c90
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/crange3.rd b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange3.rd
new file mode 100644
index 00000000..03412542
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/crange3.rd
@@ -0,0 +1,63 @@
+.*
+
+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:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+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
+.*: 00000000 0 SECTION LOCAL DEFAULT 5
+.*: 00000000 0 SECTION LOCAL DEFAULT 6
+.*: 00000000 0 SECTION LOCAL DEFAULT 7
+.*: 00001004 0 NOTYPE LOCAL DEFAULT 2 sec4
+.*: 000010a4 0 NOTYPE LOCAL DEFAULT 2 start2
+.*: 000010bc 0 NOTYPE LOCAL DEFAULT 2 sec3
+.*: 000010c4 0 NOTYPE GLOBAL DEFAULT 2 diversion
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___dtors
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors_end
+.*: 000010a4 0 NOTYPE GLOBAL DEFAULT 2 diversion2
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___ctors
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _edata
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS _end
+.*: 00001000 0 NOTYPE GLOBAL DEFAULT 1 start
+.*: 00080000 0 NOTYPE GLOBAL DEFAULT 3 _stack
+.*: 00001160 0 NOTYPE GLOBAL DEFAULT ABS ___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.17/ld/testsuite/ld-sh/sh64/crangerel1.rd b/binutils-2.17/ld/testsuite/ld-sh/sh64/crangerel1.rd
new file mode 100644
index 00000000..e9d096e2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/crangerel1.rd
@@ -0,0 +1,49 @@
+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 0000d0 10 10 12 4
+ \[10\] \.strtab STRTAB 00000000 000368 000013 00 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+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 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 SECTION LOCAL DEFAULT 7
+ 8: 00000000 0 SECTION LOCAL DEFAULT 8
+ 9: 00000000 0 SECTION LOCAL DEFAULT 9
+ 10: 00000000 0 SECTION LOCAL DEFAULT 10
+ 11: 00000000 0 NOTYPE LOCAL DEFAULT 2 start2
+ 12: 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.17/ld/testsuite/ld-sh/sh64/crangerel2.rd b/binutils-2.17/ld/testsuite/ld-sh/sh64/crangerel2.rd
new file mode 100644
index 00000000..a5f1827d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/crangerel2.rd
@@ -0,0 +1,64 @@
+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 000110 10 10 16 4
+ \[10\] \.strtab STRTAB 00000000 000444 000027 00 0 0 1
+Key to Flags:
+ W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+ I \(info\), L \(link order\), G \(group\), x \(unknown\)
+ O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+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 17 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 SECTION LOCAL DEFAULT 7
+ 8: 00000000 0 SECTION LOCAL DEFAULT 8
+ 9: 00000000 0 SECTION LOCAL DEFAULT 9
+ 10: 00000000 0 SECTION LOCAL DEFAULT 10
+ 11: 00000000 0 NOTYPE LOCAL DEFAULT 2 start2
+ 12: 00000018 0 NOTYPE LOCAL DEFAULT 2 sec1
+ 13: 00000028 0 NOTYPE LOCAL DEFAULT 2 sec2
+ 14: 0000003c 0 NOTYPE LOCAL DEFAULT 2 sec3
+ 15: 00000044 0 NOTYPE LOCAL DEFAULT 2 sec4
+ 16: 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.17/ld/testsuite/ld-sh/sh64/dlsection-1.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/dlsection-1.s
new file mode 100644
index 00000000..d83e6e1e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/dlsection.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/dlsection.sd
new file mode 100644
index 00000000..58bf965a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/endian.dbd b/binutils-2.17/ld/testsuite/ld-sh/sh64/endian.dbd
new file mode 100644
index 00000000..0369cbc1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/endian.dld b/binutils-2.17/ld/testsuite/ld-sh/sh64/endian.dld
new file mode 100644
index 00000000..f3c5bd5b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/endian.ld b/binutils-2.17/ld/testsuite/ld-sh/sh64/endian.ld
new file mode 100644
index 00000000..e9635e1c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/endian.ld
@@ -0,0 +1,6 @@
+SECTIONS {
+ .text : {
+ *(.text)
+ LONG(0x12345678);
+ }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/endian.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/endian.s
new file mode 100644
index 00000000..79bc9e4b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/endian.sbd b/binutils-2.17/ld/testsuite/ld-sh/sh64/endian.sbd
new file mode 100644
index 00000000..462f66d7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/endian.sld b/binutils-2.17/ld/testsuite/ld-sh/sh64/endian.sld
new file mode 100644
index 00000000..00975cba
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/gotplt.d b/binutils-2.17/ld/testsuite/ld-sh/sh64/gotplt.d
new file mode 100644
index 00000000..5822326d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/gotplt.map b/binutils-2.17/ld/testsuite/ld-sh/sh64/gotplt.map
new file mode 100644
index 00000000..a27c22c0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/gotplt.map
@@ -0,0 +1,4 @@
+GLIBC_2.2 {
+ local:
+ xxx;
+};
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/gotplt.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/gotplt.s
new file mode 100644
index 00000000..45ed0b28
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/init-cmpct.d b/binutils-2.17/ld/testsuite/ld-sh/sh64/init-cmpct.d
new file mode 100644
index 00000000..6f64bc41
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/init-media.d b/binutils-2.17/ld/testsuite/ld-sh/sh64/init-media.d
new file mode 100644
index 00000000..56c6c19a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/init.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/init.s
new file mode 100644
index 00000000..900e764a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/init64.d b/binutils-2.17/ld/testsuite/ld-sh/sh64/init64.d
new file mode 100644
index 00000000..01c8e970
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/mix1-noexp.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/mix1-noexp.sd
new file mode 100644
index 00000000..fe731362
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/mix1.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/mix1.sd
new file mode 100644
index 00000000..c5cc4b1c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/mix1.xd b/binutils-2.17/ld/testsuite/ld-sh/sh64/mix1.xd
new file mode 100644
index 00000000..ae82c45c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/mix1.xd
@@ -0,0 +1,45 @@
+
+.*: 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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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 \*ABS\* 0+ ___dtors
+0+10d8 g \*ABS\* 0+ __bss_start
+0+10c8 g \*ABS\* 0+ ___ctors_end
+0+10c8 g \*ABS\* 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 \*ABS\* 0+ ___dtors_end
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/mix2-noexp.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/mix2-noexp.sd
new file mode 100644
index 00000000..9112cfc4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/mix2.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/mix2.sd
new file mode 100644
index 00000000..122a4726
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/mix2.xd b/binutils-2.17/ld/testsuite/ld-sh/sh64/mix2.xd
new file mode 100644
index 00000000..a7df4efc
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/mix2.xd
@@ -0,0 +1,55 @@
+
+.*: 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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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 \*ABS\* 0+ ___dtors
+0+10cc g \.data 0+ medialabel4
+0+10d8 g \*ABS\* 0+ __bss_start
+0+10c8 g \*ABS\* 0+ ___ctors_end
+0+10d4 g \.data 0+ compactlabel5
+0+10c8 g \*ABS\* 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 \*ABS\* 0+ ___dtors_end
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/rd-sh64.exp b/binutils-2.17/ld/testsuite/ld-sh/sh64/rd-sh64.exp
new file mode 100644
index 00000000..9f31139a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/rd-sh64.exp
@@ -0,0 +1,41 @@
+# Expect script for run_dump_test based ld-sh/sh64 tests.
+# Copyright 2002, 2003 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-sh/sh64/rel-1.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/rel-1.s
new file mode 100644
index 00000000..6cf18ca0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/rel-2.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/rel-2.s
new file mode 100644
index 00000000..b1931b5e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/rel32.xd b/binutils-2.17/ld/testsuite/ld-sh/sh64/rel32.xd
new file mode 100644
index 00000000..d49b21f6
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/rel32.xd
@@ -0,0 +1,97 @@
+
+.*: 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 \*ABS\* 0+ (|.rela.text)
+0+ l d \.data 0+ (|.data)
+0+ l d \*ABS\* 0+ (|.rela.data)
+0+ l d \.bss 0+ (|.bss)
+0+ l d \.stack 0+ (|.stack)
+0+ l d \*ABS\* 0+ (|.shstrtab)
+0+ l d \*ABS\* 0+ (|.symtab)
+0+ l d \*ABS\* 0+ (|.strtab)
+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.17/ld/testsuite/ld-sh/sh64/rel64.xd b/binutils-2.17/ld/testsuite/ld-sh/sh64/rel64.xd
new file mode 100644
index 00000000..86791c94
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/rel64.xd
@@ -0,0 +1,97 @@
+
+.*: 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 \*ABS\* 0+ (|.rela.text)
+0+ l d \.data 0+ (|.data)
+0+ l d \*ABS\* 0+ (|.rela.data)
+0+ l d \.bss 0+ (|.bss)
+0+ l d \.stack 0+ (|.stack)
+0+ l d \*ABS\* 0+ (|.shstrtab)
+0+ l d \*ABS\* 0+ (|.symtab)
+0+ l d \*ABS\* 0+ (|.strtab)
+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.17/ld/testsuite/ld-sh/sh64/relax.exp b/binutils-2.17/ld/testsuite/ld-sh/sh64/relax.exp
new file mode 100644
index 00000000..45ecb824
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/relax.exp
@@ -0,0 +1,152 @@
+# Expect script for ld-sh tests
+# Copyright (C) 2001, 2002, 2003, 2004 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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.17/ld/testsuite/ld-sh/sh64/relax1.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/relax1.s
new file mode 100644
index 00000000..873954b9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/relax2.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/relax2.s
new file mode 100644
index 00000000..9bf08025
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/relax2.s
@@ -0,0 +1,3 @@
+ .text
+foo1:
+ nop
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/relax3.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/relax3.s
new file mode 100644
index 00000000..964bacda
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/relax4.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/relax4.s
new file mode 100644
index 00000000..904df7c8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/relax4.s
@@ -0,0 +1,2 @@
+ .section .cranges
+ .word 0
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/reldl-1.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/reldl-1.s
new file mode 100644
index 00000000..0aeb3322
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/reldl-2.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/reldl-2.s
new file mode 100644
index 00000000..d632021d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/reldl32.rd b/binutils-2.17/ld/testsuite/ld-sh/sh64/reldl32.rd
new file mode 100644
index 00000000..59c657e3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/reldl32.rd
@@ -0,0 +1,361 @@
+
+Relocation section '\.rela\.text' at offset 0x[0-9a-f]+ contains 26 entries:
+.*
+00000008 0+60f6 R_SH_IMM_LOW16 +00000004 +file1text1 +\+ 0
+0000000c 0+32f6 R_SH_IMM_LOW16 +0000000c +file1data2 +\+ 0
+00000010 0+35f6 R_SH_IMM_LOW16 +00000070 +file2text3 +\+ 0
+00000014 0+14f6 R_SH_IMM_LOW16 +0000012c +file2data4 +\+ 0
+00000018 0+51f6 R_SH_IMM_LOW16 +00000000 +unresolved1 +\+ 0
+0000001c 0+56f6 R_SH_IMM_LOW16 +00000000 +unresolved6 +\+ 0
+00000020 0+62f6 R_SH_IMM_LOW16 +00000000 +file1text1 +\+ 0
+00000024 0+62f6 R_SH_IMM_LOW16 +00000000 +file1text1 +\+ 18
+00000028 0+26f6 R_SH_IMM_LOW16 +00000000 +file1text5 +\+ 8
+0000002c 0+32f6 R_SH_IMM_LOW16 +0000000c +file1data2 +\+ 30
+00000030 0+32f6 R_SH_IMM_LOW16 +0000000c +file1data2 +\+ 0
+0000003c 0+47f6 R_SH_IMM_LOW16 +00000000 +unresolved7 +\+ 0
+00000040 0+2cf6 R_SH_IMM_LOW16 +00000000 +unresolved1 +\+ 0
+00000034 0+3af8 R_SH_IMM_MEDLOW16 +00000000 +file2data4 +\+ 10
+00000038 0+3af6 R_SH_IMM_LOW16 +00000000 +file2data4 +\+ 10
+00000068 0+0df6 R_SH_IMM_LOW16 +00000064 +file2text1 +\+ 0
+0000006c 0+29f6 R_SH_IMM_LOW16 +00000124 +file2data2 +\+ 0
+00000070 0+28f6 R_SH_IMM_LOW16 +00000010 +file1text3 +\+ 0
+00000074 0+86f6 R_SH_IMM_LOW16 +00000014 +file1data4 +\+ 0
+00000078 0+51f6 R_SH_IMM_LOW16 +00000000 +unresolved1 +\+ 0
+0000007c 0+69f6 R_SH_IMM_LOW16 +00000000 +unresolved3 +\+ 0
+00000080 0+8af6 R_SH_IMM_LOW16 +00000000 +unresolved8 +\+ 0
+00000084 0+37f6 R_SH_IMM_LOW16 +00000000 +unresolved9 +\+ 0
+00000088 0+62f6 R_SH_IMM_LOW16 +00000000 +file1text1 +\+ 0
+0000008c 0+50f6 R_SH_IMM_LOW16 +00000000 +file1data2 +\+ 0
+00000090 0+2df6 R_SH_IMM_LOW16 +00000000 +file1data3 +\+ 0
+
+Relocation section '\.rela\.data' at offset 0x[0-9a-f]+ contains 134 entries:
+.*
+00000008 0+1001 R_SH_DIR32 +00000004 +file1data1 +\+ 0
+0000000c 0+0c01 R_SH_DIR32 +0000000c +file1text2 +\+ 0
+00000010 0+7d01 R_SH_DIR32 +00000128 +file2data3 +\+ 0
+00000014 0+6c01 R_SH_DIR32 +00000074 +file2text4 +\+ 0
+00000018 0+7901 R_SH_DIR32 +00000000 +unresolved2 +\+ 0
+0000001c 0+0a01 R_SH_DIR32 +00000000 +unresolved5 +\+ 0
+00000020 0+7101 R_SH_DIR32 +00000000 +unresolved6 +\+ 0
+00000024 0+0b01 R_SH_DIR32 +00000000 +unresolved9 +\+ 0
+00000028 0+7f01 R_SH_DIR32 +00000000 +a1 +\+ 0
+0000002c 0+7501 R_SH_DIR32 +00000000 +a23 +\+ 0
+00000030 0+5901 R_SH_DIR32 +0000003c +b123 +\+ 0
+00000034 0+6f01 R_SH_DIR32 +0000009c +c3 +\+ 0
+00000038 0+4101 R_SH_DIR32 +000000a8 +c13 +\+ 0
+0000003c 0+2b01 R_SH_DIR32 +00000000 +a2 +\+ 0
+00000040 0+5301 R_SH_DIR32 +00000000 +a3 +\+ 0
+00000044 0+2a01 R_SH_DIR32 +00000000 +a4 +\+ 0
+00000048 0+6e01 R_SH_DIR32 +00000000 +a12 +\+ 0
+0000004c 0+1a01 R_SH_DIR32 +00000000 +a13 +\+ 0
+00000050 0+7b01 R_SH_DIR32 +00000000 +a23 +\+ 0
+00000054 0+6701 R_SH_DIR32 +00000000 +a123 +\+ 0
+00000058 0+4201 R_SH_DIR32 +00000000 +b1 +\+ 0
+0000005c 0+7601 R_SH_DIR32 +00000000 +b2 +\+ 0
+00000060 0+3401 R_SH_DIR32 +00000000 +a3 +\+ 0
+00000064 0+8401 R_SH_DIR32 +00000000 +a13 +\+ 0
+00000068 0+3301 R_SH_DIR32 +00000000 +b3 +\+ 0
+0000006c 0+6d01 R_SH_DIR32 +00000000 +b4 +\+ 0
+00000070 0+5701 R_SH_DIR32 +00000000 +b12 +\+ 0
+00000074 0+2e01 R_SH_DIR32 +00000000 +b13 +\+ 0
+00000078 0+4301 R_SH_DIR32 +00000000 +a123 +\+ 0
+0000007c 0+6a01 R_SH_DIR32 +00000024 +b3 +\+ 0
+00000080 0+4001 R_SH_DIR32 +00000030 +b13 +\+ 0
+00000084 0+7401 R_SH_DIR32 +00000034 +b23 +\+ 0
+00000088 0+8201 R_SH_DIR32 +00000000 +b23 +\+ 0
+0000008c 0+1101 R_SH_DIR32 +00000000 +b123 +\+ 0
+00000090 0+8801 R_SH_DIR32 +00000000 +c1 +\+ 0
+00000094 0+3101 R_SH_DIR32 +00000000 +c2 +\+ 0
+00000098 0+6801 R_SH_DIR32 +00000000 +c3 +\+ 0
+0000009c 0+3e01 R_SH_DIR32 +000000ac +c23 +\+ 0
+000000a0 0+8301 R_SH_DIR32 +000000b0 +c123 +\+ 0
+000000a4 0+1301 R_SH_DIR32 +00000000 +c4 +\+ 0
+000000a8 0+2501 R_SH_DIR32 +00000000 +c12 +\+ 0
+000000ac 0+3601 R_SH_DIR32 +00000000 +c13 +\+ 0
+000000b0 0+3b01 R_SH_DIR32 +00000000 +c23 +\+ 0
+000000b4 0+3f01 R_SH_DIR32 +00000000 +c123 +\+ 0
+000000b8 0+4d01 R_SH_DIR32 +00000000 +oa1 +\+ 0
+000000bc 0+1901 R_SH_DIR32 +00000000 +ob1 +\+ 0
+000000c0 0+4901 R_SH_DIR32 +000000d0 +ob123 +\+ 0
+000000c4 0+5e01 R_SH_DIR32 +00000000 +oc1 +\+ 0
+000000c8 0+7e01 R_SH_DIR32 +00000000 +oa2 +\+ 0
+000000cc 0+6601 R_SH_DIR32 +000000b8 +ob2 +\+ 0
+000000d0 0+7701 R_SH_DIR32 +00000044 +oc2 +\+ 0
+000000d4 0+4e01 R_SH_DIR32 +00000000 +oa12 +\+ 0
+000000d8 0+2001 R_SH_DIR32 +00000000 +oa12 +\+ 0
+000000dc 0+6501 R_SH_DIR32 +00000000 +ob12 +\+ 0
+000000e0 0+4f01 R_SH_DIR32 +000000c4 +ob12 +\+ 0
+000000e4 0+5f01 R_SH_DIR32 +00000000 +oc12 +\+ 0
+000000e8 0+1701 R_SH_DIR32 +00000050 +oc12 +\+ 0
+000000ec 0+4401 R_SH_DIR32 +00000000 +oa23 +\+ 0
+000000f0 0+4a01 R_SH_DIR32 +00000000 +oa13 +\+ 0
+000000f4 0+0f01 R_SH_DIR32 +0000005c +oc123 +\+ 0
+000000f8 0+5a01 R_SH_DIR32 +00000000 +ob13 +\+ 0
+000000fc 0+6101 R_SH_DIR32 +00000000 +oc13 +\+ 0
+00000100 0+8701 R_SH_DIR32 +000000cc +ob23 +\+ 0
+00000104 0+3001 R_SH_DIR32 +00000058 +oc23 +\+ 0
+00000108 0+5c01 R_SH_DIR32 +00000000 +oa123 +\+ 0
+0000010c 0+5501 R_SH_DIR32 +00000000 +oa123 +\+ 0
+00000110 0+6b01 R_SH_DIR32 +00000000 +ob123 +\+ 0
+00000114 0+3801 R_SH_DIR32 +00000000 +oc123 +\+ 0
+00000120 0+8101 R_SH_DIR32 +0000011c +file2data1 +\+ 0
+00000124 0+6301 R_SH_DIR32 +0000006c +file2text2 +\+ 0
+00000128 0+8501 R_SH_DIR32 +00000010 +file1data3 +\+ 0
+0000012c 0+7c01 R_SH_DIR32 +00000014 +file1text4 +\+ 0
+00000130 0+7901 R_SH_DIR32 +00000000 +unresolved2 +\+ 0
+00000134 0+8001 R_SH_DIR32 +00000000 +unresolved4 +\+ 0
+00000138 0+4d01 R_SH_DIR32 +00000000 +oa1 +\+ 0
+0000013c 0+1c01 R_SH_DIR32 +00000000 +oa2 +\+ 0
+00000140 0+7201 R_SH_DIR32 +00000000 +oa3 +\+ 0
+00000144 0+2101 R_SH_DIR32 +00000000 +oa13 +\+ 0
+00000148 0+1e01 R_SH_DIR32 +00000054 +oc13 +\+ 0
+0000014c 0+1501 R_SH_DIR32 +00000000 +oa4 +\+ 0
+00000150 0+2001 R_SH_DIR32 +00000000 +oa12 +\+ 0
+00000154 0+4a01 R_SH_DIR32 +00000000 +oa13 +\+ 0
+00000158 0+3d01 R_SH_DIR32 +00000000 +oa23 +\+ 0
+0000015c 0+4401 R_SH_DIR32 +00000000 +oa23 +\+ 0
+00000160 0+5c01 R_SH_DIR32 +00000000 +oa123 +\+ 0
+00000164 0+1b01 R_SH_DIR32 +00000048 +oc3 +\+ 0
+00000168 0+5501 R_SH_DIR32 +00000000 +oa123 +\+ 0
+0000016c 0+1901 R_SH_DIR32 +00000000 +ob1 +\+ 0
+00000170 0+2701 R_SH_DIR32 +00000000 +ob2 +\+ 0
+00000174 0+6401 R_SH_DIR32 +00000000 +ob3 +\+ 0
+00000178 0+1801 R_SH_DIR32 +00000000 +ob4 +\+ 0
+0000017c 0+8901 R_SH_DIR32 +00000000 +oa3 +\+ 0
+00000180 0+3001 R_SH_DIR32 +00000058 +oc23 +\+ 0
+00000184 0+0f01 R_SH_DIR32 +0000005c +oc123 +\+ 0
+00000188 0+6501 R_SH_DIR32 +00000000 +ob12 +\+ 0
+0000018c 0+5a01 R_SH_DIR32 +00000000 +ob13 +\+ 0
+00000190 0+5201 R_SH_DIR32 +000000c8 +ob13 +\+ 0
+00000194 0+8701 R_SH_DIR32 +000000cc +ob23 +\+ 0
+00000198 0+5d01 R_SH_DIR32 +00000000 +ob23 +\+ 0
+0000019c 0+6b01 R_SH_DIR32 +00000000 +ob123 +\+ 0
+000001a0 0+5e01 R_SH_DIR32 +00000000 +oc1 +\+ 0
+000001a4 0+1601 R_SH_DIR32 +000000bc +ob3 +\+ 0
+000001a8 0+4901 R_SH_DIR32 +000000d0 +ob123 +\+ 0
+000001ac 0+0e01 R_SH_DIR32 +00000000 +oc2 +\+ 0
+000001b0 0+3c01 R_SH_DIR32 +00000000 +oc3 +\+ 0
+000001b4 0+5801 R_SH_DIR32 +00000000 +oc4 +\+ 0
+000001b8 0+5f01 R_SH_DIR32 +00000000 +oc12 +\+ 0
+000001bc 0+6101 R_SH_DIR32 +00000000 +oc13 +\+ 0
+000001c0 0+2f01 R_SH_DIR32 +00000000 +oc23 +\+ 0
+000001c4 0+3801 R_SH_DIR32 +00000000 +oc123 +\+ 0
+000001c8 0+7f01 R_SH_DIR32 +00000000 +a1 +\+ 0
+000001cc 0+1f01 R_SH_DIR32 +00000098 +c2 +\+ 0
+000001d0 0+7401 R_SH_DIR32 +00000034 +b23 +\+ 0
+000001d4 0+4201 R_SH_DIR32 +00000000 +b1 +\+ 0
+000001d8 0+8801 R_SH_DIR32 +00000000 +c1 +\+ 0
+000001dc 0+6e01 R_SH_DIR32 +00000000 +a12 +\+ 0
+000001e0 0+5b01 R_SH_DIR32 +00000000 +a2 +\+ 0
+000001e4 0+1201 R_SH_DIR32 +00000020 +b2 +\+ 0
+000001e8 0+5701 R_SH_DIR32 +00000000 +b12 +\+ 0
+000001ec 0+2501 R_SH_DIR32 +00000000 +c12 +\+ 0
+000001f0 0+5901 R_SH_DIR32 +0000003c +b123 +\+ 0
+000001f4 0+8301 R_SH_DIR32 +000000b0 +c123 +\+ 0
+000001f8 0+1a01 R_SH_DIR32 +00000000 +a13 +\+ 0
+000001fc 0+2e01 R_SH_DIR32 +00000000 +b13 +\+ 0
+00000200 0+3e01 R_SH_DIR32 +000000ac +c23 +\+ 0
+00000204 0+4301 R_SH_DIR32 +00000000 +a123 +\+ 0
+00000208 0+3601 R_SH_DIR32 +00000000 +c13 +\+ 0
+0000020c 0+6701 R_SH_DIR32 +00000000 +a123 +\+ 0
+00000210 0+7301 R_SH_DIR32 +000000a4 +c12 +\+ 0
+00000214 0+7501 R_SH_DIR32 +00000000 +a23 +\+ 0
+00000218 0+1101 R_SH_DIR32 +00000000 +b123 +\+ 0
+0000021c 0+4501 R_SH_DIR32 +00000000 +a12 +\+ 0
+00000220 0+7801 R_SH_DIR32 +0000002c +b12 +\+ 0
+00000224 0+3f01 R_SH_DIR32 +00000000 +c123 +\+ 0
+
+Symbol table '\.symtab' contains 139 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 SECTION LOCAL DEFAULT 7
+ 8: 00000000 0 SECTION LOCAL DEFAULT 8
+ 9: 00000000 0 SECTION LOCAL DEFAULT 9
+ 10: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved5
+ 11: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved9
+ 12: 0000000c 0 NOTYPE GLOBAL DEFAULT 1 file1text2
+ 13: 00000064 0 NOTYPE GLOBAL DEFAULT 1 file2text1
+ 14: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc2
+ 15: 0000005c 0 NOTYPE GLOBAL DEFAULT 1 oc123
+ 16: 00000004 0 NOTYPE GLOBAL DEFAULT 3 file1data1
+ 17: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b123
+ 18: 00000020 0 NOTYPE GLOBAL DEFAULT 1 b2
+ 19: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c4
+ 20: 0000012c 0 NOTYPE GLOBAL DEFAULT 3 file2data4
+ 21: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa4
+ 22: 000000bc 0 NOTYPE GLOBAL DEFAULT 1 ob3
+ 23: 00000050 0 NOTYPE GLOBAL DEFAULT 1 oc12
+ 24: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob4
+ 25: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob1
+ 26: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a13
+ 27: 00000048 0 NOTYPE GLOBAL DEFAULT 1 oc3
+ 28: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa2
+ 29: 000000a0 0 NOTYPE GLOBAL DEFAULT 1 c4
+ 30: 00000054 0 NOTYPE GLOBAL DEFAULT 1 oc13
+ 31: 00000098 0 NOTYPE GLOBAL DEFAULT 1 c2
+ 32: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa12
+ 33: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa13
+ 34: 000000c0 0 NOTYPE GLOBAL DEFAULT 1 ob4
+ 35: 0000001c 0 NOTYPE GLOBAL DEFAULT 1 b1
+ 36: 00000018 0 NOTYPE GLOBAL DEFAULT 1 file1text5
+ 37: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c12
+ 38: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1text5
+ 39: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob2
+ 40: 00000010 0 NOTYPE GLOBAL DEFAULT 1 file1text3
+ 41: 00000124 0 NOTYPE GLOBAL DEFAULT 3 file2data2
+ 42: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a4
+ 43: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a2
+ 44: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved1
+ 45: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1data3
+ 46: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b13
+ 47: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc23
+ 48: 00000058 0 NOTYPE GLOBAL DEFAULT 1 oc23
+ 49: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c2
+ 50: 0000000c 0 NOTYPE GLOBAL DEFAULT 3 file1data2
+ 51: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b3
+ 52: 00000000 0 NOTYPE GLOBAL DEFAULT UND a3
+ 53: 00000070 0 NOTYPE GLOBAL DEFAULT 1 file2text3
+ 54: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c13
+ 55: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved9
+ 56: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc123
+ 57: 00000028 0 NOTYPE GLOBAL DEFAULT 1 b4
+ 58: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file2data4
+ 59: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c23
+ 60: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc3
+ 61: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa23
+ 62: 000000ac 0 NOTYPE GLOBAL DEFAULT 1 c23
+ 63: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c123
+ 64: 00000030 0 NOTYPE GLOBAL DEFAULT 1 b13
+ 65: 000000a8 0 NOTYPE GLOBAL DEFAULT 1 c13
+ 66: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b1
+ 67: 00000000 0 NOTYPE GLOBAL DEFAULT UND a123
+ 68: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa23
+ 69: 00000000 0 NOTYPE GLOBAL DEFAULT UND a12
+ 70: 000000b4 0 NOTYPE GLOBAL DEFAULT 1 ob1
+ 71: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved7
+ 72: 00000060 0 NOTYPE GLOBAL DEFAULT 1 start2
+ 73: 000000d0 0 NOTYPE GLOBAL DEFAULT 1 ob123
+ 74: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa13
+ 75: 00000094 0 NOTYPE GLOBAL DEFAULT 1 c1
+ 76: 0000004c 0 NOTYPE GLOBAL DEFAULT 1 oc4
+ 77: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa1
+ 78: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa12
+ 79: 000000c4 0 NOTYPE GLOBAL DEFAULT 1 ob12
+ 80: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1data2
+ 81: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved1
+ 82: 000000c8 0 NOTYPE GLOBAL DEFAULT 1 ob13
+ 83: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a3
+ 84: 00000018 0 NOTYPE GLOBAL DEFAULT 3 file1data5
+ 85: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa123
+ 86: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved6
+ 87: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b12
+ 88: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc4
+ 89: 0000003c 0 NOTYPE GLOBAL DEFAULT 1 b123
+ 90: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob13
+ 91: 00000000 0 NOTYPE GLOBAL DEFAULT UND a2
+ 92: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa123
+ 93: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob23
+ 94: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc1
+ 95: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc12
+ 96: 00000004 0 NOTYPE GLOBAL DEFAULT 1 file1text1
+ 97: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oc13
+ 98: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND file1text1
+ 99: 0000006c 0 NOTYPE GLOBAL DEFAULT 1 file2text2
+ 100: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob3
+ 101: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob12
+ 102: 000000b8 0 NOTYPE GLOBAL DEFAULT 1 ob2
+ 103: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a123
+ 104: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c3
+ 105: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved3
+ 106: 00000024 0 NOTYPE GLOBAL DEFAULT 1 b3
+ 107: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND ob123
+ 108: 00000074 0 NOTYPE GLOBAL DEFAULT 1 file2text4
+ 109: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b4
+ 110: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a12
+ 111: 0000009c 0 NOTYPE GLOBAL DEFAULT 1 c3
+ 112: 00000040 0 NOTYPE GLOBAL DEFAULT 1 oc1
+ 113: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved6
+ 114: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND oa3
+ 115: 000000a4 0 NOTYPE GLOBAL DEFAULT 1 c12
+ 116: 00000034 0 NOTYPE GLOBAL DEFAULT 1 b23
+ 117: 00000000 0 NOTYPE GLOBAL DEFAULT UND a23
+ 118: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b2
+ 119: 00000044 0 NOTYPE GLOBAL DEFAULT 1 oc2
+ 120: 0000002c 0 NOTYPE GLOBAL DEFAULT 1 b12
+ 121: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved2
+ 122: 00000000 0 NOTYPE GLOBAL DEFAULT 1 start
+ 123: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a23
+ 124: 00000014 0 NOTYPE GLOBAL DEFAULT 1 file1text4
+ 125: 00000128 0 NOTYPE GLOBAL DEFAULT 3 file2data3
+ 126: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa2
+ 127: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND a1
+ 128: 00000000 0 NOTYPE GLOBAL DEFAULT UND unresolved4
+ 129: 0000011c 0 NOTYPE GLOBAL DEFAULT 3 file2data1
+ 130: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND b23
+ 131: 000000b0 0 NOTYPE GLOBAL DEFAULT 1 c123
+ 132: 00000000 0 NOTYPE GLOBAL DEFAULT UND a13
+ 133: 00000010 0 NOTYPE GLOBAL DEFAULT 3 file1data3
+ 134: 00000014 0 NOTYPE GLOBAL DEFAULT 3 file1data4
+ 135: 000000cc 0 NOTYPE GLOBAL DEFAULT 1 ob23
+ 136: 00000000 0 <processor specific>: 13 GLOBAL DEFAULT UND c1
+ 137: 00000000 0 NOTYPE GLOBAL DEFAULT UND oa3
+ 138: 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.17/ld/testsuite/ld-sh/sh64/reldl64.rd b/binutils-2.17/ld/testsuite/ld-sh/sh64/reldl64.rd
new file mode 100644
index 00000000..fe002a2b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/reldl64.rd
@@ -0,0 +1,363 @@
+
+Relocation section '\.rela\.text' at offset 0x[0-9a-f]+ contains 28 entries:
+.*
+0+8 0+60000000f6 R_SH_IMM_LOW16[ ]+0+4 +file1text1[ ]+\+ 0
+0+c 0+32000000f6 R_SH_IMM_LOW16[ ]+0+c +file1data2[ ]+\+ 0
+0+10 0+35000000f6 R_SH_IMM_LOW16[ ]+0+78 +file2text3[ ]+\+ 0
+0+14 0+14000000f6 R_SH_IMM_LOW16[ ]+0+12c +file2data4[ ]+\+ 0
+0+18 0+51000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved1[ ]+\+ 0
+0+1c 0+56000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved6[ ]+\+ 0
+0+20 0+62000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text1[ ]+\+ 0
+0+24 0+62000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text1[ ]+\+ 18
+0+28 0+26000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text5[ ]+\+ 8
+0+2c 0+32000000f6 R_SH_IMM_LOW16[ ]+0+c +file1data2[ ]+\+ 30
+0+30 0+32000000f6 R_SH_IMM_LOW16[ ]+0+c +file1data2[ ]+\+ 0
+0+44 0+47000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved7[ ]+\+ 0
+0+48 0+2c000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved1[ ]+\+ 0
+0+34 0+3a000000fc R_SH_IMM_HI16[ ]+0+ +file2data4[ ]+\+ 10
+0+38 0+3a000000fa R_SH_IMM_MEDHI16[ ]+0+ +file2data4[ ]+\+ 10
+0+3c 0+3a000000f8 R_SH_IMM_MEDLOW16[ ]+0+ +file2data4[ ]+\+ 10
+0+40 0+3a000000f6 R_SH_IMM_LOW16[ ]+0+ +file2data4[ ]+\+ 10
+0+70 0+0d000000f6 R_SH_IMM_LOW16[ ]+0+6c +file2text1[ ]+\+ 0
+0+74 0+29000000f6 R_SH_IMM_LOW16[ ]+0+124 +file2data2[ ]+\+ 0
+0+78 0+28000000f6 R_SH_IMM_LOW16[ ]+0+10 +file1text3[ ]+\+ 0
+0+7c 0+86000000f6 R_SH_IMM_LOW16[ ]+0+14 +file1data4[ ]+\+ 0
+0+80 0+51000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved1[ ]+\+ 0
+0+84 0+69000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved3[ ]+\+ 0
+0+88 0+8a000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved8[ ]+\+ 0
+0+8c 0+37000000f6 R_SH_IMM_LOW16[ ]+0+ +unresolved9[ ]+\+ 0
+0+90 0+62000000f6 R_SH_IMM_LOW16[ ]+0+ +file1text1[ ]+\+ 0
+0+94 0+50000000f6 R_SH_IMM_LOW16[ ]+0+ +file1data2[ ]+\+ 0
+0+98 0+2d000000f6 R_SH_IMM_LOW16[ ]+0+ +file1data3[ ]+\+ 0
+
+Relocation section '\.rela\.data' at offset 0x[0-9a-f]+ contains 134 entries:
+.*
+0+8 0+1000000001 R_SH_DIR32[ ]+0+4 +file1data1[ ]+\+ 0
+0+c 0+c00000001 R_SH_DIR32[ ]+0+c +file1text2[ ]+\+ 0
+0+10 0+7d00000001 R_SH_DIR32[ ]+0+128 +file2data3[ ]+\+ 0
+0+14 0+6c00000001 R_SH_DIR32[ ]+0+7c +file2text4[ ]+\+ 0
+0+18 0+7900000001 R_SH_DIR32[ ]+0+ +unresolved2[ ]+\+ 0
+0+1c 0+0a00000001 R_SH_DIR32[ ]+0+ +unresolved5[ ]+\+ 0
+0+20 0+7100000001 R_SH_DIR32[ ]+0+ +unresolved6[ ]+\+ 0
+0+24 0+0b00000001 R_SH_DIR32[ ]+0+ +unresolved9[ ]+\+ 0
+0+28 0+7f00000001 R_SH_DIR32[ ]+0+ +a1[ ]+\+ 0
+0+2c 0+7500000001 R_SH_DIR32[ ]+0+ +a23[ ]+\+ 0
+0+30 0+5900000001 R_SH_DIR32[ ]+0+44 +b123[ ]+\+ 0
+0+34 0+6f00000001 R_SH_DIR32[ ]+0+a4 +c3[ ]+\+ 0
+0+38 0+4100000001 R_SH_DIR32[ ]+0+b0 +c13[ ]+\+ 0
+0+3c 0+2b00000001 R_SH_DIR32[ ]+0+ +a2[ ]+\+ 0
+0+40 0+5300000001 R_SH_DIR32[ ]+0+ +a3[ ]+\+ 0
+0+44 0+2a00000001 R_SH_DIR32[ ]+0+ +a4[ ]+\+ 0
+0+48 0+6e00000001 R_SH_DIR32[ ]+0+ +a12[ ]+\+ 0
+0+4c 0+1a00000001 R_SH_DIR32[ ]+0+ +a13[ ]+\+ 0
+0+50 0+7b00000001 R_SH_DIR32[ ]+0+ +a23[ ]+\+ 0
+0+54 0+6700000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+58 0+4200000001 R_SH_DIR32[ ]+0+ +b1[ ]+\+ 0
+0+5c 0+7600000001 R_SH_DIR32[ ]+0+ +b2[ ]+\+ 0
+0+60 0+3400000001 R_SH_DIR32[ ]+0+ +a3[ ]+\+ 0
+0+64 0+8400000001 R_SH_DIR32[ ]+0+ +a13[ ]+\+ 0
+0+68 0+3300000001 R_SH_DIR32[ ]+0+ +b3[ ]+\+ 0
+0+6c 0+6d00000001 R_SH_DIR32[ ]+0+ +b4[ ]+\+ 0
+0+70 0+5700000001 R_SH_DIR32[ ]+0+ +b12[ ]+\+ 0
+0+74 0+2e00000001 R_SH_DIR32[ ]+0+ +b13[ ]+\+ 0
+0+78 0+4300000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+7c 0+6a00000001 R_SH_DIR32[ ]+0+24 +b3[ ]+\+ 0
+0+80 0+4000000001 R_SH_DIR32[ ]+0+30 +b13[ ]+\+ 0
+0+84 0+7400000001 R_SH_DIR32[ ]+0+34 +b23[ ]+\+ 0
+0+88 0+8200000001 R_SH_DIR32[ ]+0+ +b23[ ]+\+ 0
+0+8c 0+1100000001 R_SH_DIR32[ ]+0+ +b123[ ]+\+ 0
+0+90 0+8800000001 R_SH_DIR32[ ]+0+ +c1[ ]+\+ 0
+0+94 0+3100000001 R_SH_DIR32[ ]+0+ +c2[ ]+\+ 0
+0+98 0+6800000001 R_SH_DIR32[ ]+0+ +c3[ ]+\+ 0
+0+9c 0+3e00000001 R_SH_DIR32[ ]+0+b4 +c23[ ]+\+ 0
+0+a0 0+8300000001 R_SH_DIR32[ ]+0+b8 +c123[ ]+\+ 0
+0+a4 0+1300000001 R_SH_DIR32[ ]+0+ +c4[ ]+\+ 0
+0+a8 0+2500000001 R_SH_DIR32[ ]+0+ +c12[ ]+\+ 0
+0+ac 0+3600000001 R_SH_DIR32[ ]+0+ +c13[ ]+\+ 0
+0+b0 0+3b00000001 R_SH_DIR32[ ]+0+ +c23[ ]+\+ 0
+0+b4 0+3f00000001 R_SH_DIR32[ ]+0+ +c123[ ]+\+ 0
+0+b8 0+4d00000001 R_SH_DIR32[ ]+0+ +oa1[ ]+\+ 0
+0+bc 0+1900000001 R_SH_DIR32[ ]+0+ +ob1[ ]+\+ 0
+0+c0 0+4900000001 R_SH_DIR32[ ]+0+d8 +ob123[ ]+\+ 0
+0+c4 0+5e00000001 R_SH_DIR32[ ]+0+ +oc1[ ]+\+ 0
+0+c8 0+7e00000001 R_SH_DIR32[ ]+0+ +oa2[ ]+\+ 0
+0+cc 0+6600000001 R_SH_DIR32[ ]+0+c0 +ob2[ ]+\+ 0
+0+d0 0+7700000001 R_SH_DIR32[ ]+0+4c +oc2[ ]+\+ 0
+0+d4 0+4e00000001 R_SH_DIR32[ ]+0+ +oa12[ ]+\+ 0
+0+d8 0+2000000001 R_SH_DIR32[ ]+0+ +oa12[ ]+\+ 0
+0+dc 0+6500000001 R_SH_DIR32[ ]+0+ +ob12[ ]+\+ 0
+0+e0 0+4f00000001 R_SH_DIR32[ ]+0+cc +ob12[ ]+\+ 0
+0+e4 0+5f00000001 R_SH_DIR32[ ]+0+ +oc12[ ]+\+ 0
+0+e8 0+1700000001 R_SH_DIR32[ ]+0+58 +oc12[ ]+\+ 0
+0+ec 0+4400000001 R_SH_DIR32[ ]+0+ +oa23[ ]+\+ 0
+0+f0 0+4a00000001 R_SH_DIR32[ ]+0+ +oa13[ ]+\+ 0
+0+f4 0+0f00000001 R_SH_DIR32[ ]+0+64 +oc123[ ]+\+ 0
+0+f8 0+5a00000001 R_SH_DIR32[ ]+0+ +ob13[ ]+\+ 0
+0+fc 0+6100000001 R_SH_DIR32[ ]+0+ +oc13[ ]+\+ 0
+0+100 0+8700000001 R_SH_DIR32[ ]+0+d4 +ob23[ ]+\+ 0
+0+104 0+3000000001 R_SH_DIR32[ ]+0+60 +oc23[ ]+\+ 0
+0+108 0+5c00000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+10c 0+5500000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+110 0+6b00000001 R_SH_DIR32[ ]+0+ +ob123[ ]+\+ 0
+0+114 0+3800000001 R_SH_DIR32[ ]+0+ +oc123[ ]+\+ 0
+0+120 0+8100000001 R_SH_DIR32[ ]+0+11c +file2data1[ ]+\+ 0
+0+124 0+6300000001 R_SH_DIR32[ ]+0+74 +file2text2[ ]+\+ 0
+0+128 0+8500000001 R_SH_DIR32[ ]+0+10 +file1data3[ ]+\+ 0
+0+12c 0+7c00000001 R_SH_DIR32[ ]+0+14 +file1text4[ ]+\+ 0
+0+130 0+7900000001 R_SH_DIR32[ ]+0+ +unresolved2[ ]+\+ 0
+0+134 0+8000000001 R_SH_DIR32[ ]+0+ +unresolved4[ ]+\+ 0
+0+138 0+4d00000001 R_SH_DIR32[ ]+0+ +oa1[ ]+\+ 0
+0+13c 0+1c00000001 R_SH_DIR32[ ]+0+ +oa2[ ]+\+ 0
+0+140 0+7200000001 R_SH_DIR32[ ]+0+ +oa3[ ]+\+ 0
+0+144 0+2100000001 R_SH_DIR32[ ]+0+ +oa13[ ]+\+ 0
+0+148 0+1e00000001 R_SH_DIR32[ ]+0+5c +oc13[ ]+\+ 0
+0+14c 0+1500000001 R_SH_DIR32[ ]+0+ +oa4[ ]+\+ 0
+0+150 0+2000000001 R_SH_DIR32[ ]+0+ +oa12[ ]+\+ 0
+0+154 0+4a00000001 R_SH_DIR32[ ]+0+ +oa13[ ]+\+ 0
+0+158 0+3d00000001 R_SH_DIR32[ ]+0+ +oa23[ ]+\+ 0
+0+15c 0+4400000001 R_SH_DIR32[ ]+0+ +oa23[ ]+\+ 0
+0+160 0+5c00000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+164 0+1b00000001 R_SH_DIR32[ ]+0+50 +oc3[ ]+\+ 0
+0+168 0+5500000001 R_SH_DIR32[ ]+0+ +oa123[ ]+\+ 0
+0+16c 0+1900000001 R_SH_DIR32[ ]+0+ +ob1[ ]+\+ 0
+0+170 0+2700000001 R_SH_DIR32[ ]+0+ +ob2[ ]+\+ 0
+0+174 0+6400000001 R_SH_DIR32[ ]+0+ +ob3[ ]+\+ 0
+0+178 0+1800000001 R_SH_DIR32[ ]+0+ +ob4[ ]+\+ 0
+0+17c 0+8900000001 R_SH_DIR32[ ]+0+ +oa3[ ]+\+ 0
+0+180 0+3000000001 R_SH_DIR32[ ]+0+60 +oc23[ ]+\+ 0
+0+184 0+0f00000001 R_SH_DIR32[ ]+0+64 +oc123[ ]+\+ 0
+0+188 0+6500000001 R_SH_DIR32[ ]+0+ +ob12[ ]+\+ 0
+0+18c 0+5a00000001 R_SH_DIR32[ ]+0+ +ob13[ ]+\+ 0
+0+190 0+5200000001 R_SH_DIR32[ ]+0+d0 +ob13[ ]+\+ 0
+0+194 0+8700000001 R_SH_DIR32[ ]+0+d4 +ob23[ ]+\+ 0
+0+198 0+5d00000001 R_SH_DIR32[ ]+0+ +ob23[ ]+\+ 0
+0+19c 0+6b00000001 R_SH_DIR32[ ]+0+ +ob123[ ]+\+ 0
+0+1a0 0+5e00000001 R_SH_DIR32[ ]+0+ +oc1[ ]+\+ 0
+0+1a4 0+1600000001 R_SH_DIR32[ ]+0+c4 +ob3[ ]+\+ 0
+0+1a8 0+4900000001 R_SH_DIR32[ ]+0+d8 +ob123[ ]+\+ 0
+0+1ac 0+0e00000001 R_SH_DIR32[ ]+0+ +oc2[ ]+\+ 0
+0+1b0 0+3c00000001 R_SH_DIR32[ ]+0+ +oc3[ ]+\+ 0
+0+1b4 0+5800000001 R_SH_DIR32[ ]+0+ +oc4[ ]+\+ 0
+0+1b8 0+5f00000001 R_SH_DIR32[ ]+0+ +oc12[ ]+\+ 0
+0+1bc 0+6100000001 R_SH_DIR32[ ]+0+ +oc13[ ]+\+ 0
+0+1c0 0+2f00000001 R_SH_DIR32[ ]+0+ +oc23[ ]+\+ 0
+0+1c4 0+3800000001 R_SH_DIR32[ ]+0+ +oc123[ ]+\+ 0
+0+1c8 0+7f00000001 R_SH_DIR32[ ]+0+ +a1[ ]+\+ 0
+0+1cc 0+1f00000001 R_SH_DIR32[ ]+0+a0 +c2[ ]+\+ 0
+0+1d0 0+7400000001 R_SH_DIR32[ ]+0+34 +b23[ ]+\+ 0
+0+1d4 0+4200000001 R_SH_DIR32[ ]+0+ +b1[ ]+\+ 0
+0+1d8 0+8800000001 R_SH_DIR32[ ]+0+ +c1[ ]+\+ 0
+0+1dc 0+6e00000001 R_SH_DIR32[ ]+0+ +a12[ ]+\+ 0
+0+1e0 0+5b00000001 R_SH_DIR32[ ]+0+ +a2[ ]+\+ 0
+0+1e4 0+1200000001 R_SH_DIR32[ ]+0+20 +b2[ ]+\+ 0
+0+1e8 0+5700000001 R_SH_DIR32[ ]+0+ +b12[ ]+\+ 0
+0+1ec 0+2500000001 R_SH_DIR32[ ]+0+ +c12[ ]+\+ 0
+0+1f0 0+5900000001 R_SH_DIR32[ ]+0+44 +b123[ ]+\+ 0
+0+1f4 0+8300000001 R_SH_DIR32[ ]+0+b8 +c123[ ]+\+ 0
+0+1f8 0+1a00000001 R_SH_DIR32[ ]+0+ +a13[ ]+\+ 0
+0+1fc 0+2e00000001 R_SH_DIR32[ ]+0+ +b13[ ]+\+ 0
+0+200 0+3e00000001 R_SH_DIR32[ ]+0+b4 +c23[ ]+\+ 0
+0+204 0+4300000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+208 0+3600000001 R_SH_DIR32[ ]+0+ +c13[ ]+\+ 0
+0+20c 0+6700000001 R_SH_DIR32[ ]+0+ +a123[ ]+\+ 0
+0+210 0+7300000001 R_SH_DIR32[ ]+0+ac +c12[ ]+\+ 0
+0+214 0+7500000001 R_SH_DIR32[ ]+0+ +a23[ ]+\+ 0
+0+218 0+1100000001 R_SH_DIR32[ ]+0+ +b123[ ]+\+ 0
+0+21c 0+4500000001 R_SH_DIR32[ ]+0+ +a12[ ]+\+ 0
+0+220 0+7800000001 R_SH_DIR32[ ]+0+2c +b12[ ]+\+ 0
+0+224 0+3f00000001 R_SH_DIR32[ ]+0+ +c123[ ]+\+ 0
+
+Symbol table '\.symtab' contains 139 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 SECTION LOCAL DEFAULT 4
+ 5: 0+ 0 SECTION LOCAL DEFAULT 5
+ 6: 0+ 0 SECTION LOCAL DEFAULT 6
+ 7: 0+ 0 SECTION LOCAL DEFAULT 7
+ 8: 0+ 0 SECTION LOCAL DEFAULT 8
+ 9: 0+ 0 SECTION LOCAL DEFAULT 9
+ 10: 0+ 0 NOTYPE GLOBAL DEFAULT UND unresolved5
+ 11: 0+ 0 NOTYPE GLOBAL DEFAULT UND unresolved9
+ 12: 0+c 0 NOTYPE GLOBAL DEFAULT 1 file1text2
+ 13: 0+6c 0 NOTYPE GLOBAL DEFAULT 1 file2text1
+ 14: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oc2
+ 15: 0+64 0 NOTYPE GLOBAL DEFAULT 1 oc123
+ 16: 0+4 0 NOTYPE GLOBAL DEFAULT 3 file1data1
+ 17: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND b123
+ 18: 0+20 0 NOTYPE GLOBAL DEFAULT 1 b2
+ 19: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND c4
+ 20: 0+12c 0 NOTYPE GLOBAL DEFAULT 3 file2data4
+ 21: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oa4
+ 22: 0+c4 0 NOTYPE GLOBAL DEFAULT 1 ob3
+ 23: 0+58 0 NOTYPE GLOBAL DEFAULT 1 oc12
+ 24: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND ob4
+ 25: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND ob1
+ 26: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND a13
+ 27: 0+50 0 NOTYPE GLOBAL DEFAULT 1 oc3
+ 28: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oa2
+ 29: 0+a8 0 NOTYPE GLOBAL DEFAULT 1 c4
+ 30: 0+5c 0 NOTYPE GLOBAL DEFAULT 1 oc13
+ 31: 0+a0 0 NOTYPE GLOBAL DEFAULT 1 c2
+ 32: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oa12
+ 33: 0+ 0 NOTYPE GLOBAL DEFAULT UND oa13
+ 34: 0+c8 0 NOTYPE GLOBAL DEFAULT 1 ob4
+ 35: 0+1c 0 NOTYPE GLOBAL DEFAULT 1 b1
+ 36: 0+18 0 NOTYPE GLOBAL DEFAULT 1 file1text5
+ 37: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND c12
+ 38: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND file1text5
+ 39: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND ob2
+ 40: 0+10 0 NOTYPE GLOBAL DEFAULT 1 file1text3
+ 41: 0+124 0 NOTYPE GLOBAL DEFAULT 3 file2data2
+ 42: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND a4
+ 43: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND a2
+ 44: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved1
+ 45: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND file1data3
+ 46: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND b13
+ 47: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oc23
+ 48: 0+60 0 NOTYPE GLOBAL DEFAULT 1 oc23
+ 49: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND c2
+ 50: 0+c 0 NOTYPE GLOBAL DEFAULT 3 file1data2
+ 51: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND b3
+ 52: 0+ 0 NOTYPE GLOBAL DEFAULT UND a3
+ 53: 0+78 0 NOTYPE GLOBAL DEFAULT 1 file2text3
+ 54: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND c13
+ 55: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved9
+ 56: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oc123
+ 57: 0+28 0 NOTYPE GLOBAL DEFAULT 1 b4
+ 58: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND file2data4
+ 59: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND c23
+ 60: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oc3
+ 61: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oa23
+ 62: 0+b4 0 NOTYPE GLOBAL DEFAULT 1 c23
+ 63: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND c123
+ 64: 0+30 0 NOTYPE GLOBAL DEFAULT 1 b13
+ 65: 0+b0 0 NOTYPE GLOBAL DEFAULT 1 c13
+ 66: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND b1
+ 67: 0+ 0 NOTYPE GLOBAL DEFAULT UND a123
+ 68: 0+ 0 NOTYPE GLOBAL DEFAULT UND oa23
+ 69: 0+ 0 NOTYPE GLOBAL DEFAULT UND a12
+ 70: 0+bc 0 NOTYPE GLOBAL DEFAULT 1 ob1
+ 71: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved7
+ 72: 0+68 0 NOTYPE GLOBAL DEFAULT 1 start2
+ 73: 0+d8 0 NOTYPE GLOBAL DEFAULT 1 ob123
+ 74: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oa13
+ 75: 0+9c 0 NOTYPE GLOBAL DEFAULT 1 c1
+ 76: 0+54 0 NOTYPE GLOBAL DEFAULT 1 oc4
+ 77: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oa1
+ 78: 0+ 0 NOTYPE GLOBAL DEFAULT UND oa12
+ 79: 0+cc 0 NOTYPE GLOBAL DEFAULT 1 ob12
+ 80: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND file1data2
+ 81: 0+ 0 NOTYPE GLOBAL DEFAULT UND unresolved1
+ 82: 0+d0 0 NOTYPE GLOBAL DEFAULT 1 ob13
+ 83: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND a3
+ 84: 0+18 0 NOTYPE GLOBAL DEFAULT 3 file1data5
+ 85: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oa123
+ 86: 0+ 0 NOTYPE GLOBAL DEFAULT UND unresolved6
+ 87: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND b12
+ 88: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oc4
+ 89: 0+44 0 NOTYPE GLOBAL DEFAULT 1 b123
+ 90: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND ob13
+ 91: 0+ 0 NOTYPE GLOBAL DEFAULT UND a2
+ 92: 0+ 0 NOTYPE GLOBAL DEFAULT UND oa123
+ 93: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND ob23
+ 94: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oc1
+ 95: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oc12
+ 96: 0+4 0 NOTYPE GLOBAL DEFAULT 1 file1text1
+ 97: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oc13
+ 98: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND file1text1
+ 99: 0+74 0 NOTYPE GLOBAL DEFAULT 1 file2text2
+ 100: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND ob3
+ 101: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND ob12
+ 102: 0+c0 0 NOTYPE GLOBAL DEFAULT 1 ob2
+ 103: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND a123
+ 104: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND c3
+ 105: 0+ 0 NOTYPE GLOBAL DEFAULT UND unresolved3
+ 106: 0+24 0 NOTYPE GLOBAL DEFAULT 1 b3
+ 107: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND ob123
+ 108: 0+7c 0 NOTYPE GLOBAL DEFAULT 1 file2text4
+ 109: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND b4
+ 110: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND a12
+ 111: 0+a4 0 NOTYPE GLOBAL DEFAULT 1 c3
+ 112: 0+48 0 NOTYPE GLOBAL DEFAULT 1 oc1
+ 113: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND unresolved6
+ 114: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND oa3
+ 115: 0+ac 0 NOTYPE GLOBAL DEFAULT 1 c12
+ 116: 0+34 0 NOTYPE GLOBAL DEFAULT 1 b23
+ 117: 0+ 0 NOTYPE GLOBAL DEFAULT UND a23
+ 118: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND b2
+ 119: 0+4c 0 NOTYPE GLOBAL DEFAULT 1 oc2
+ 120: 0+2c 0 NOTYPE GLOBAL DEFAULT 1 b12
+ 121: 0+ 0 NOTYPE GLOBAL DEFAULT UND unresolved2
+ 122: 0+ 0 NOTYPE GLOBAL DEFAULT 1 start
+ 123: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND a23
+ 124: 0+14 0 NOTYPE GLOBAL DEFAULT 1 file1text4
+ 125: 0+128 0 NOTYPE GLOBAL DEFAULT 3 file2data3
+ 126: 0+ 0 NOTYPE GLOBAL DEFAULT UND oa2
+ 127: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND a1
+ 128: 0+ 0 NOTYPE GLOBAL DEFAULT UND unresolved4
+ 129: 0+11c 0 NOTYPE GLOBAL DEFAULT 3 file2data1
+ 130: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND b23
+ 131: 0+b8 0 NOTYPE GLOBAL DEFAULT 1 c123
+ 132: 0+ 0 NOTYPE GLOBAL DEFAULT UND a13
+ 133: 0+10 0 NOTYPE GLOBAL DEFAULT 3 file1data3
+ 134: 0+14 0 NOTYPE GLOBAL DEFAULT 3 file1data4
+ 135: 0+d4 0 NOTYPE GLOBAL DEFAULT 1 ob23
+ 136: 0+ 0 <processor specific>: 13 GLOBAL DEFAULT UND c1
+ 137: 0+ 0 NOTYPE GLOBAL DEFAULT UND oa3
+ 138: 0+ 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.17/ld/testsuite/ld-sh/sh64/relfail.exp b/binutils-2.17/ld/testsuite/ld-sh/sh64/relfail.exp
new file mode 100644
index 00000000..825676b3
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/relfail.exp
@@ -0,0 +1,216 @@
+# Expect script for ld-sh tests
+# Copyright (C) 2001, 2002, 2003, 2004 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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.17/ld/testsuite/ld-sh/sh64/relfail.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/relfail.s
new file mode 100644
index 00000000..5f5d1718
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/sh64-1.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/sh64-1.s
new file mode 100644
index 00000000..3e488db1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/sh64-2.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/sh64-2.s
new file mode 100644
index 00000000..8ca24c02
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/sh64.exp b/binutils-2.17/ld/testsuite/ld-sh/sh64/sh64.exp
new file mode 100644
index 00000000..a150dc24
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/sh64.exp
@@ -0,0 +1,134 @@
+# Expect script for ld-sh tests
+# Copyright (C) 2000, 2001, 2002, 2003 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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.17/ld/testsuite/ld-sh/sh64/shcmp-1.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/shcmp-1.s
new file mode 100644
index 00000000..f915af4b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/shdl-1.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/shdl-1.s
new file mode 100644
index 00000000..0f2803c9
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/shdl-2.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/shdl-2.s
new file mode 100644
index 00000000..a41fd52a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/shdl32.xd b/binutils-2.17/ld/testsuite/ld-sh/sh64/shdl32.xd
new file mode 100644
index 00000000..c0b1f347
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/shdl32.xd
@@ -0,0 +1,126 @@
+.*: 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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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 \*ABS\* 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 \*ABS\* 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 \*ABS\* 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 \*ABS\* 0+ ___dtors_end
+0+151c g \.data 0+ dbaz_otherboth2
+0+1500 g \.data 0+ dbazboth2
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/shdl64.sd b/binutils-2.17/ld/testsuite/ld-sh/sh64/shdl64.sd
new file mode 100644
index 00000000..abe257a5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/shdl64.xd b/binutils-2.17/ld/testsuite/ld-sh/sh64/shdl64.xd
new file mode 100644
index 00000000..8a7b2364
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/sh64/shdl64.xd
@@ -0,0 +1,126 @@
+.*: 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+ l d \*ABS\* 0+ (|\.shstrtab)
+0+ l d \*ABS\* 0+ (|\.symtab)
+0+ l d \*ABS\* 0+ (|\.strtab)
+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 \*ABS\* 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 \*ABS\* 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 \*ABS\* 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 \*ABS\* 0+ ___dtors_end
+0+151c g \.data 0+ dbaz_otherboth2
+0+1500 g \.data 0+ dbazboth2
diff --git a/binutils-2.17/ld/testsuite/ld-sh/sh64/shmix-1.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/shmix-1.s
new file mode 100644
index 00000000..e078ac27
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/shmix-2.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/shmix-2.s
new file mode 100644
index 00000000..2ea73446
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/shmix-3.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/shmix-3.s
new file mode 100644
index 00000000..42d1212b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/stobin-0-dso.d b/binutils-2.17/ld/testsuite/ld-sh/sh64/stobin-0-dso.d
new file mode 100644
index 00000000..405c05a7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/stobin-1.d b/binutils-2.17/ld/testsuite/ld-sh/sh64/stobin-1.d
new file mode 100644
index 00000000..e0f8b27d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/stobin.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/stobin.s
new file mode 100644
index 00000000..30d3597b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sh64/stolib.s b/binutils-2.17/ld/testsuite/ld-sh/sh64/stolib.s
new file mode 100644
index 00000000..587faa6d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/shared-1.d b/binutils-2.17/ld/testsuite/ld-sh/shared-1.d
new file mode 100644
index 00000000..fbc4d6e0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/shared-1.d
@@ -0,0 +1,22 @@
+#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:
+.*
+000001b0 000000a5 R_SH_RELATIVE +000001b4
+
+Hex dump of section '\.rela\.text':
+ 0x0000019c 000001b4 000000a5 000001b0 .*
+
+Hex dump of section '\.text':
+ 0x000001a8 000001b4 00090009 00090009 .*
diff --git a/binutils-2.17/ld/testsuite/ld-sh/shared-2.d b/binutils-2.17/ld/testsuite/ld-sh/shared-2.d
new file mode 100644
index 00000000..e65fea40
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/start.s b/binutils-2.17/ld/testsuite/ld-sh/start.s
new file mode 100644
index 00000000..2af4c799
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sub2l-1.d b/binutils-2.17/ld/testsuite/ld-sh/sub2l-1.d
new file mode 100644
index 00000000..40d4e088
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/sub2l.s b/binutils-2.17/ld/testsuite/ld-sh/sub2l.s
new file mode 100644
index 00000000..1a077d09
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/textrel1.s b/binutils-2.17/ld/testsuite/ld-sh/textrel1.s
new file mode 100644
index 00000000..eda4804b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/textrel2.s b/binutils-2.17/ld/testsuite/ld-sh/textrel2.s
new file mode 100644
index 00000000..1846a6b7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlsbin-0-dso.d b/binutils-2.17/ld/testsuite/ld-sh/tlsbin-0-dso.d
new file mode 100644
index 00000000..dc3eaa68
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlsbin-1.d b/binutils-2.17/ld/testsuite/ld-sh/tlsbin-1.d
new file mode 100644
index 00000000..e3f48341
--- /dev/null
+++ b/binutils-2.17/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 ! 0x[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 ! 0x1c .*
+ 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 ! 0x14 .*
+ 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 ! 0x8 .*
+ 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 ! 0x10 .*
+ 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 ! 0x18 .*
+ 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 ! 0x10 .*
+ 4010d6: 0c 31 add r0,r1
+ 4010d8: 09 00 nop
+ 4010da: 09 00 nop
+ 4010dc: 2b d2 mov\.l 40118c <fn2\+0x18c>,r2 ! 0x14 .*
+ 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 ! 0x18 .*
+ 401106: 0c 31 add r0,r1
+ 401108: 09 00 nop
+ 40110a: 09 00 nop
+ 40110c: 21 d2 mov\.l 401194 <fn2\+0x194>,r2 ! 0x1c .*
+ 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 ! 0x14 .*
+ 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 ! 0x18 .*
+ 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 ! 0x8 .*
+ 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 ! 0x18 .*
+ 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 ! 0x[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 ! 0x10 .*
+ 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 ! 0x20 .*
+ 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 ! 0x2c
+ 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 ! 0x1c .*
+ 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 ! 0x8 .*
+ 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 ! 0x28
+ 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 ! 0x18 .*
+ 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.17/ld/testsuite/ld-sh/tlsbin-2.d b/binutils-2.17/ld/testsuite/ld-sh/tlsbin-2.d
new file mode 100644
index 00000000..6118071e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlsbin-3.d b/binutils-2.17/ld/testsuite/ld-sh/tlsbin-3.d
new file mode 100644
index 00000000..618ae59d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlsbin-4.d b/binutils-2.17/ld/testsuite/ld-sh/tlsbin-4.d
new file mode 100644
index 00000000..b1683b8e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlsbin.s b/binutils-2.17/ld/testsuite/ld-sh/tlsbin.s
new file mode 100644
index 00000000..642eb3d0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlsbinpic.s b/binutils-2.17/ld/testsuite/ld-sh/tlsbinpic.s
new file mode 100644
index 00000000..cb8b361b
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlslib.s b/binutils-2.17/ld/testsuite/ld-sh/tlslib.s
new file mode 100644
index 00000000..35b6c70c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlspic-1.d b/binutils-2.17/ld/testsuite/ld-sh/tlspic-1.d
new file mode 100644
index 00000000..5310cd0f
--- /dev/null
+++ b/binutils-2.17/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 ! 0x[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 ! 0x30
+ [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 ! 0x[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 ! 0x38
+ [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 ! 0x10 .*
+ [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 ! 0x[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 ! 0x18 .*
+ [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 ! 0x3c
+ [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 ! 0x[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 ! 0x44
+ [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 ! 0x24
+ [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 ! 0x[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 ! 0x2c
+ [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 ! 0x1c .*
+ [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 ! 0x[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 ! 0x8 .*
+ [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 ! 0xc .*
+ [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 ! 0x10 .*
+ [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 ! 0x14 .*
+ [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 ! 0x1c .*
+ [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 ! 0x[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 ! 0x18 .*
+ [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 ! 0x1c .*
+ [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 ! 0x38
+ [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 ! 0x18 .*
+ [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 ! 0x44
+ [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 ! 0x2c
+ [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.17/ld/testsuite/ld-sh/tlspic-2.d b/binutils-2.17/ld/testsuite/ld-sh/tlspic-2.d
new file mode 100644
index 00000000..70d65dac
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sh/tlspic-2.d
@@ -0,0 +1,82 @@
+#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 *
+.* SECTION LOCAL DEFAULT +7 *
+.* SECTION LOCAL DEFAULT +8 *
+.* SECTION LOCAL DEFAULT +9 *
+.* 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.17/ld/testsuite/ld-sh/tlspic-3.d b/binutils-2.17/ld/testsuite/ld-sh/tlspic-3.d
new file mode 100644
index 00000000..6e799893
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlspic-4.d b/binutils-2.17/ld/testsuite/ld-sh/tlspic-4.d
new file mode 100644
index 00000000..263c5d62
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlspic1.s b/binutils-2.17/ld/testsuite/ld-sh/tlspic1.s
new file mode 100644
index 00000000..153709a1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlspic2.s b/binutils-2.17/ld/testsuite/ld-sh/tlspic2.s
new file mode 100644
index 00000000..35319ba8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlstpoff-1.d b/binutils-2.17/ld/testsuite/ld-sh/tlstpoff-1.d
new file mode 100644
index 00000000..25de25be
--- /dev/null
+++ b/binutils-2.17/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 ! 0x[0-9a-f]+
+ [0-9a-f]+: 0c 3c add r0,r12
+ [0-9a-f]+: 02 d0 mov.l [0-9a-f]+ <foo\+0x14>,r0 ! 0xc
+ [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.17/ld/testsuite/ld-sh/tlstpoff-2.d b/binutils-2.17/ld/testsuite/ld-sh/tlstpoff-2.d
new file mode 100644
index 00000000..519c6efa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlstpoff1.s b/binutils-2.17/ld/testsuite/ld-sh/tlstpoff1.s
new file mode 100644
index 00000000..754f3c13
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/tlstpoff2.s b/binutils-2.17/ld/testsuite/ld-sh/tlstpoff2.s
new file mode 100644
index 00000000..6ae9e92d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/weak1.d b/binutils-2.17/ld/testsuite/ld-sh/weak1.d
new file mode 100644
index 00000000..d248bb9d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sh/weak1.s b/binutils-2.17/ld/testsuite/ld-sh/weak1.s
new file mode 100644
index 00000000..79192afb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-shared/elf-offset.ld b/binutils-2.17/ld/testsuite/ld-shared/elf-offset.ld
new file mode 100644
index 00000000..5e6611a2
--- /dev/null
+++ b/binutils-2.17/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 : { *(.got.plt) *(.got) }
+ .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.17/ld/testsuite/ld-shared/main.c b/binutils-2.17/ld/testsuite/ld-shared/main.c
new file mode 100644
index 00000000..ce06261e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-shared/main.c
@@ -0,0 +1,84 @@
+/* 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 ()
+{
+ int (*p) ();
+
+ 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
+ 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
+#endif
+ printf ("shlib_check () == %d\n", shlib_check ());
+ return 0;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-shared/sh1.c b/binutils-2.17/ld/testsuite/ld-shared/sh1.c
new file mode 100644
index 00000000..20f183c2
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-shared/sh1.c
@@ -0,0 +1,166 @@
+/* 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 ();
+}
+
+int
+shlib_overriddencall2 ()
+{
+ return 7;
+}
+#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.17/ld/testsuite/ld-shared/sh2.c b/binutils-2.17/ld/testsuite/ld-shared/sh2.c
new file mode 100644
index 00000000..013a4e09
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-shared/sh2.c
@@ -0,0 +1,14 @@
+/* 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;
+}
diff --git a/binutils-2.17/ld/testsuite/ld-shared/shared.dat b/binutils-2.17/ld/testsuite/ld-shared/shared.dat
new file mode 100644
index 00000000..40ee37ff
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-shared/shared.exp b/binutils-2.17/ld/testsuite/ld-shared/shared.exp
new file mode 100644
index 00000000..6d4b73cc
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-shared/shared.exp
@@ -0,0 +1,301 @@
+# Expect script for ld-shared tests
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+# 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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 ""
+
+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
+}
+
+# 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*"
+ 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*"
+ 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*"
+ 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*"
+ 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*"
+ 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.17/ld/testsuite/ld-shared/sun4.dat b/binutils-2.17/ld/testsuite/ld-shared/sun4.dat
new file mode 100644
index 00000000..be0d87d0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-shared/symbolic.dat b/binutils-2.17/ld/testsuite/ld-shared/symbolic.dat
new file mode 100644
index 00000000..71464867
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-shared/xcoff.dat b/binutils-2.17/ld/testsuite/ld-shared/xcoff.dat
new file mode 100644
index 00000000..a409d96a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/sparc.exp b/binutils-2.17/ld/testsuite/ld-sparc/sparc.exp
new file mode 100644
index 00000000..6e7e95cc
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sparc/sparc.exp
@@ -0,0 +1,122 @@
+# Expect script for ld-sparc tests
+# Copyright (C) 2002, 2003, 2005 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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}}
+ "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"}
+}
+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"}
+}
+
+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.17/ld/testsuite/ld-sparc/tlsg32.s b/binutils-2.17/ld/testsuite/ld-sparc/tlsg32.s
new file mode 100644
index 00000000..0339f50c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlsg32.sd b/binutils-2.17/ld/testsuite/ld-sparc/tlsg32.sd
new file mode 100644
index 00000000..861ac2eb
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlsg64.s b/binutils-2.17/ld/testsuite/ld-sparc/tlsg64.s
new file mode 100644
index 00000000..4419974e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlsg64.sd b/binutils-2.17/ld/testsuite/ld-sparc/tlsg64.sd
new file mode 100644
index 00000000..4181dde4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlslib.s b/binutils-2.17/ld/testsuite/ld-sparc/tlslib.s
new file mode 100644
index 00000000..6b62e09f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlsnopic.s b/binutils-2.17/ld/testsuite/ld-sparc/tlsnopic.s
new file mode 100644
index 00000000..648660a7
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlspic.s b/binutils-2.17/ld/testsuite/ld-sparc/tlspic.s
new file mode 100644
index 00000000..7c806d00
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbin32.dd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.dd
new file mode 100644
index 00000000..37c1d042
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbin32.rd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.rd
new file mode 100644
index 00000000..4869131c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.rd
@@ -0,0 +1,129 @@
+#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\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[ 1\] .interp +.*
+ +\[ 2\] .hash +.*
+ +\[ 3\] .dynsym +.*
+ +\[ 4\] .dynstr +.*
+ +\[ 5\] .rela.dyn +.*
+ +\[ 6\] .text +PROGBITS +0+11000 0+1000 0+1194 00 +AX +0 +0 4096
+ +\[ 7\] .tdata +PROGBITS +0+22194 0+2194 0+1060 00 WAT +0 +0 +4
+ +\[ 8\] .tbss +NOBITS +0+231f4 0+31f4 0+40 00 WAT +0 +0 +4
+ +\[ 9\] .dynamic +DYNAMIC +0+231f4 0+31f4 0+80 08 +WA +4 +0 +4
+ +\[10\] .got +PROGBITS +0+23274 0+3274 0+14 04 +WA +0 +0 +4
+ +\[11\] .shstrtab +.*
+ +\[12\] .symtab +.*
+ +\[13\] .strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x12000
+There are 6 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 67 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 +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 +HIDDEN +9 _DYNAMIC
+.* OBJECT +LOCAL +HIDDEN +ABS _PROCEDURE_LINKAGE_TABLE_
+.* OBJECT +LOCAL +HIDDEN +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.17/ld/testsuite/ld-sparc/tlssunbin32.s b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.s
new file mode 100644
index 00000000..21716f36
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbin32.sd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.sd
new file mode 100644
index 00000000..7db88c9f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbin32.td b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin32.td
new file mode 100644
index 00000000..f5974e75
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbin64.dd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.dd
new file mode 100644
index 00000000..0585ae6e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbin64.rd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.rd
new file mode 100644
index 00000000..4ce130b7
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.rd
@@ -0,0 +1,129 @@
+#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\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ +\[ 1\] .interp +.*
+ +\[ 2\] .hash +.*
+ +\[ 3\] .dynsym +.*
+ +\[ 4\] .dynstr +.*
+ +\[ 5\] .rela.dyn +.*
+ +\[ 6\] .text +PROGBITS +0+101000 0+1000 0+11a4 00 +AX +0 +0 4096
+ +\[ 7\] .tdata +PROGBITS +0+2021a4 0+21a4 0+0060 00 WAT +0 +0 +4
+ +\[ 8\] .tbss +NOBITS +0+202204 0+2204 0+40 00 WAT +0 +0 +4
+ +\[ 9\] .dynamic +DYNAMIC +0+202208 0+2208 0+100 10 +WA +4 +0 +8
+ +\[10\] .got +PROGBITS +0+202308 0+2308 0+28 08 +WA +0 +0 +8
+ +\[11\] .shstrtab +.*
+ +\[12\] .symtab +.*
+ +\[13\] .strtab +.*
+#...
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x102000
+There are 6 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 67 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 +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 +HIDDEN +9 _DYNAMIC
+.* OBJECT +LOCAL +HIDDEN +ABS _PROCEDURE_LINKAGE_TABLE_
+.* OBJECT +LOCAL +HIDDEN +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.17/ld/testsuite/ld-sparc/tlssunbin64.s b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.s
new file mode 100644
index 00000000..bb62610d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbin64.sd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.sd
new file mode 100644
index 00000000..73a87e07
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbin64.td b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbin64.td
new file mode 100644
index 00000000..f7eef833
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbinpic32.s b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbinpic32.s
new file mode 100644
index 00000000..60fb5857
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunbinpic64.s b/binutils-2.17/ld/testsuite/ld-sparc/tlssunbinpic64.s
new file mode 100644
index 00000000..a13d2d31
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunnopic32.dd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic32.dd
new file mode 100644
index 00000000..f3070fce
--- /dev/null
+++ b/binutils-2.17/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: isparc-*-*
+
+.*: +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.17/ld/testsuite/ld-sparc/tlssunnopic32.rd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic32.rd
new file mode 100644
index 00000000..19fbf559
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic32.rd
@@ -0,0 +1,96 @@
+#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\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[ 1\] .hash +.*
+ +\[ 2\] .dynsym +.*
+ +\[ 3\] .dynstr +.*
+ +\[ 4\] .rela.dyn +.*
+ +\[ 5\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[ 6\] .tbss +NOBITS +0+12000 0+2000 0+24 0+ WAT +0 +0 +4
+ +\[ 7\] .dynamic +DYNAMIC +0+12000 0+2000 0+80 08 +WA +3 +0 +4
+ +\[ 8\] .got +PROGBITS +0+12080 0+2080 0+1c 04 +WA +0 +0 +4
+ +\[ 9\] .shstrtab +.*
+ +\[10\] .symtab +.*
+ +\[11\] .strtab +.*
+#...
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are 4 program headers, starting at offset [0-9a-f]+
+
+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 30 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 +6 bl1
+.* TLS +LOCAL +DEFAULT +6 bl2
+.* TLS +LOCAL +DEFAULT +6 bl3
+.* TLS +LOCAL +DEFAULT +6 bl4
+.* TLS +LOCAL +DEFAULT +6 bl5
+.* OBJECT +LOCAL +HIDDEN +ABS _DYNAMIC
+.* TLS +LOCAL +HIDDEN +6 sh3
+.* OBJECT +LOCAL +HIDDEN +ABS _PROCEDURE_LINKAGE_TABLE_
+.* TLS +LOCAL +HIDDEN +6 sh4
+.* TLS +LOCAL +HIDDEN +6 sh1
+.* OBJECT +LOCAL +HIDDEN +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +HIDDEN +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.17/ld/testsuite/ld-sparc/tlssunnopic32.s b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic32.s
new file mode 100644
index 00000000..6c0ec339
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunnopic32.sd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic32.sd
new file mode 100644
index 00000000..0322a0b3
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunnopic64.dd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic64.dd
new file mode 100644
index 00000000..4443a944
--- /dev/null
+++ b/binutils-2.17/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: isparc-*-*
+
+.*: +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.17/ld/testsuite/ld-sparc/tlssunnopic64.rd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic64.rd
new file mode 100644
index 00000000..ce375efe
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic64.rd
@@ -0,0 +1,98 @@
+#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\] +NULL +0+ 0+ 0+ 0+ +0 +0 +0
+ +\[ 1\] .hash +.*
+ +\[ 2\] .dynsym +.*
+ +\[ 3\] .dynstr +.*
+ +\[ 4\] .rela.dyn +.*
+ +\[ 5\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[ 6\] .tbss +NOBITS +0+102000 0+2000 0+24 0+ WAT +0 +0 +4
+ +\[ 7\] .dynamic +DYNAMIC +0+102000 0+2000 0+100 10 +WA +3 +0 +8
+ +\[ 8\] .got +PROGBITS +0+102100 0+2100 0+38 08 +WA +0 +0 +8
+ +\[ 9\] .shstrtab +.*
+ +\[10\] .symtab +.*
+ +\[11\] .strtab +.*
+#...
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are 4 program headers, starting at offset [0-9a-f]+
+
+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 30 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 +6 bl1
+.* TLS +LOCAL +DEFAULT +6 bl2
+.* TLS +LOCAL +DEFAULT +6 bl3
+.* TLS +LOCAL +DEFAULT +6 bl4
+.* TLS +LOCAL +DEFAULT +6 bl5
+.* OBJECT +LOCAL +HIDDEN +ABS _DYNAMIC
+.* TLS +LOCAL +HIDDEN +6 sh3
+.* OBJECT +LOCAL +HIDDEN +ABS _PROCEDURE_LINKAGE_TABLE_
+.* TLS +LOCAL +HIDDEN +6 sh4
+.* TLS +LOCAL +HIDDEN +6 sh1
+.* OBJECT +LOCAL +HIDDEN +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +HIDDEN +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.17/ld/testsuite/ld-sparc/tlssunnopic64.s b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic64.s
new file mode 100644
index 00000000..3d0a4d3e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunnopic64.sd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunnopic64.sd
new file mode 100644
index 00000000..423b90c5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunpic32.dd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.dd
new file mode 100644
index 00000000..c34d514a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunpic32.rd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.rd
new file mode 100644
index 00000000..818d859e
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.rd
@@ -0,0 +1,139 @@
+#source: tlssunpic32.s
+#source: tlspic.s
+#as: --32 -K PIC
+#ld: -shared -melf32_sparc
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+There are 15 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\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[ 7\] .tdata +PROGBITS +0+12000 0+2000 0+60 0+ WAT +0 +0 +4
+ +\[ 8\] .tbss +NOBITS +0+12060 0+2060 0+20 0+ WAT +0 +0 +4
+ +\[ 9\] .dynamic +DYNAMIC +0+12060 0+2060 0+98 08 +WA +3 +0 +4
+ +\[10\] .got +PROGBITS +0+120f8 0+20f8 0+4c 04 +WA +0 +0 +4
+ +\[11\] .plt +.*
+ +\[12\] .shstrtab +.*
+ +\[13\] .symtab +.*
+ +\[14\] .strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are 4 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 +8 *
+.* 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 55 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 +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 +HIDDEN +8 sH1
+.* OBJECT +LOCAL +HIDDEN +ABS _DYNAMIC
+.* TLS +LOCAL +HIDDEN +7 sh3
+.* TLS +LOCAL +HIDDEN +8 sH2
+.* TLS +LOCAL +HIDDEN +8 sH7
+.* OBJECT +LOCAL +HIDDEN +ABS _PROCEDURE_LINKAGE_TABLE_
+.* TLS +LOCAL +HIDDEN +7 sh7
+.* TLS +LOCAL +HIDDEN +7 sh8
+.* TLS +LOCAL +HIDDEN +8 sH4
+.* TLS +LOCAL +HIDDEN +7 sh4
+.* TLS +LOCAL +HIDDEN +8 sH3
+.* TLS +LOCAL +HIDDEN +7 sh5
+.* TLS +LOCAL +HIDDEN +8 sH5
+.* TLS +LOCAL +HIDDEN +8 sH6
+.* TLS +LOCAL +HIDDEN +8 sH8
+.* TLS +LOCAL +HIDDEN +7 sh1
+.* OBJECT +LOCAL +HIDDEN +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +HIDDEN +7 sh2
+.* TLS +LOCAL +HIDDEN +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.17/ld/testsuite/ld-sparc/tlssunpic32.s b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.s
new file mode 100644
index 00000000..9e8a2357
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunpic32.sd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.sd
new file mode 100644
index 00000000..4aecfd7d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunpic32.td b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic32.td
new file mode 100644
index 00000000..eb4e3445
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunpic64.dd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.dd
new file mode 100644
index 00000000..0b41b685
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunpic64.rd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.rd
new file mode 100644
index 00000000..0033426c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.rd
@@ -0,0 +1,139 @@
+#source: tlssunpic64.s
+#source: tlspic.s
+#as: --64 -Av9 -K PIC
+#ld: -shared -melf64_sparc
+#readelf: -WSsrl
+#target: sparc*-*-*
+
+There are 15 section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ +\[Nr\] Name +Type +Address +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\] .text +PROGBITS +0+1000 0+1000 0+1000 0+ +AX +0 +0 4096
+ +\[ 7\] .tdata +PROGBITS +0+102000 0+2000 0+60 0+ WAT +0 +0 +4
+ +\[ 8\] .tbss +NOBITS +0+102060 0+2060 0+20 0+ WAT +0 +0 +4
+ +\[ 9\] .dynamic +DYNAMIC +0+102060 0+2060 0+130 10 +WA +3 +0 +8
+ +\[10\] .got +PROGBITS +0+102190 0+2190 0+98 08 +WA +0 +0 +8
+ +\[11\] .plt +.*
+ +\[12\] .shstrtab +.*
+ +\[13\] .symtab +.*
+ +\[14\] .strtab +.*
+#...
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are 4 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 +8 *
+.* 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 55 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 +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 +HIDDEN +8 sH1
+.* OBJECT +LOCAL +HIDDEN +ABS _DYNAMIC
+.* TLS +LOCAL +HIDDEN +7 sh3
+.* TLS +LOCAL +HIDDEN +8 sH2
+.* TLS +LOCAL +HIDDEN +8 sH7
+.* OBJECT +LOCAL +HIDDEN +ABS _PROCEDURE_LINKAGE_TABLE_
+.* TLS +LOCAL +HIDDEN +7 sh7
+.* TLS +LOCAL +HIDDEN +7 sh8
+.* TLS +LOCAL +HIDDEN +8 sH4
+.* TLS +LOCAL +HIDDEN +7 sh4
+.* TLS +LOCAL +HIDDEN +8 sH3
+.* TLS +LOCAL +HIDDEN +7 sh5
+.* TLS +LOCAL +HIDDEN +8 sH5
+.* TLS +LOCAL +HIDDEN +8 sH6
+.* TLS +LOCAL +HIDDEN +8 sH8
+.* TLS +LOCAL +HIDDEN +7 sh1
+.* OBJECT +LOCAL HIDDEN +ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL +HIDDEN +7 sh2
+.* TLS +LOCAL +HIDDEN +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.17/ld/testsuite/ld-sparc/tlssunpic64.s b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.s
new file mode 100644
index 00000000..14e110dd
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunpic64.sd b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.sd
new file mode 100644
index 00000000..9061c2ef
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/tlssunpic64.td b/binutils-2.17/ld/testsuite/ld-sparc/tlssunpic64.td
new file mode 100644
index 00000000..1e82d2b4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks1-lib.dd b/binutils-2.17/ld/testsuite/ld-sparc/vxworks1-lib.dd
new file mode 100644
index 00000000..49dab7bc
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks1-lib.nd b/binutils-2.17/ld/testsuite/ld-sparc/vxworks1-lib.nd
new file mode 100644
index 00000000..cbc1c8c4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks1-lib.rd b/binutils-2.17/ld/testsuite/ld-sparc/vxworks1-lib.rd
new file mode 100644
index 00000000..1390e78a
--- /dev/null
+++ b/binutils-2.17/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
+00090c00 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 00090800 x \+ 0
diff --git a/binutils-2.17/ld/testsuite/ld-sparc/vxworks1-lib.s b/binutils-2.17/ld/testsuite/ld-sparc/vxworks1-lib.s
new file mode 100644
index 00000000..e1221a22
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks1-static.d b/binutils-2.17/ld/testsuite/ld-sparc/vxworks1-static.d
new file mode 100644
index 00000000..88c0baf1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks1.dd b/binutils-2.17/ld/testsuite/ld-sparc/vxworks1.dd
new file mode 100644
index 00000000..16e72fda
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks1.ld b/binutils-2.17/ld/testsuite/ld-sparc/vxworks1.ld
new file mode 100644
index 00000000..979d7733
--- /dev/null
+++ b/binutils-2.17/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);
+ .bss : { *(.bss) }
+
+ . = ALIGN (0x400);
+ .data : { *(.data) }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-sparc/vxworks1.rd b/binutils-2.17/ld/testsuite/ld-sparc/vxworks1.rd
new file mode 100644
index 00000000..e02146b4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks1.s b/binutils-2.17/ld/testsuite/ld-sparc/vxworks1.s
new file mode 100644
index 00000000..82106c81
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks2-static.sd b/binutils-2.17/ld/testsuite/ld-sparc/vxworks2-static.sd
new file mode 100644
index 00000000..55fc5296
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks2.s b/binutils-2.17/ld/testsuite/ld-sparc/vxworks2.s
new file mode 100644
index 00000000..0a883a97
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-sparc/vxworks2.sd b/binutils-2.17/ld/testsuite/ld-sparc/vxworks2.sd
new file mode 100644
index 00000000..08765688
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-srec/sr1.c b/binutils-2.17/ld/testsuite/ld-srec/sr1.c
new file mode 100644
index 00000000..d7de9774
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-srec/sr2.c b/binutils-2.17/ld/testsuite/ld-srec/sr2.c
new file mode 100644
index 00000000..5736cfa4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-srec/sr3.cc b/binutils-2.17/ld/testsuite/ld-srec/sr3.cc
new file mode 100644
index 00000000..0b5fa7ec
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-srec/srec.exp b/binutils-2.17/ld/testsuite/ld-srec/srec.exp
new file mode 100644
index 00000000..74e76e6a
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-srec/srec.exp
@@ -0,0 +1,426 @@
+# Test linking directly to S-records.
+# By Ian Lance Taylor, Cygnus Support.
+# Copyright 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# 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.
+ set flags "--traditional-format"
+
+ # 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 "-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 call __gccmain
+ set flags "$flags --defsym __gccmain=0"
+
+ # ARM targets cannot convert format in the linker
+ # using the --oformat command line switch
+ setup_xfail "*arm*-*-*"
+ setup_xfail "xscale-*-*"
+ setup_xfail "thumb-*-*"
+ }
+
+ # PowerPC EABI code calls __eabi.
+ if [istarget powerpc*-*-eabi*] {
+ set flags "$flags --defsym __eabi=0"
+ }
+
+ # mn10200 code calls __truncsipsi2_d0_d2.
+ if {[istarget mn10200*-*-*]} then {
+ set flags "$flags --defsym __truncsipsi2_d0_d2=0"
+ }
+
+ # m6811/m6812 code has references to soft registers.
+ if {[istarget m6811-*-*] || [istarget m6812-*-*]} {
+ set flags "$flags --defsym _.frame=0 --defsym _.d1=0 --defsym _.d2=0"
+ set flags "$flags --defsym _.d3=0 --defsym _.d4=0"
+ set flags "$flags --defsym _.tmp=0 --defsym _.xy=0 --defsym _.z=0"
+ }
+
+ # 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"
+ }
+
+ # Some OpenBSD targets have ProPolice and reference __guard and
+ # __stack_smash_handler.
+ if [istarget *-*-openbsd*] {
+ set flags "$flags --defsym __guard=0"
+ set flags "$flags --defsym __stack_smash_handler=0"
+ }
+
+ 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"
+ verbose "$objcopy -O srec tmpdir/sr1 tmpdir/sr1.sr"
+ catch "exec $objcopy -O srec tmpdir/sr1 tmpdir/sr1.sr" exec_output
+ 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.
+catch "exec $ld --verbose" exec_output
+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 { [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 build special EABI sections.
+# setup_xfail "powerpc*-*-eabi*"
+
+# 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.
+setup_xfail "hppa*-*-*"
+
+# 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*"
+
+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 { [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 "powerpc*-*-eabi*"
+setup_xfail "v850*-*-elf"
+setup_xfail "alpha*-*-elf*" "alpha*-*-linux-*" "alpha*-*-gnu*"
+setup_xfail "alpha*-*-netbsd*"
+setup_xfail "hppa*-*-*"
+setup_xfail "ia64-*-*"
+setup_xfail "*-*-cygwin*" "*-*-mingw*" "*-*-pe*" "*-*-winnt*"
+
+run_srec_test $test2 "tmpdir/sr3.o"
diff --git a/binutils-2.17/ld/testsuite/ld-undefined/undefined.c b/binutils-2.17/ld/testsuite/ld-undefined/undefined.c
new file mode 100644
index 00000000..ef2aec6d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-undefined/undefined.exp b/binutils-2.17/ld/testsuite/ld-undefined/undefined.exp
new file mode 100644
index 00000000..07fca057
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-undefined/undefined.exp
@@ -0,0 +1,132 @@
+# 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
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+set testund "undefined"
+set testfn "undefined function"
+set testline "undefined line"
+
+if { [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
+}
+
+catch "exec rm -f tmpdir/undefined" exec_output
+
+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"
+verbose "$ld -e start $flags -o tmpdir/undefined tmpdir/undefined.o"
+
+catch "exec $ld -e start $flags -o tmpdir/undefined tmpdir/undefined.o" exec_output
+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*"
+
+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 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-*-*
+
+checkund $ml $testline
diff --git a/binutils-2.17/ld/testsuite/ld-undefined/weak-undef.exp b/binutils-2.17/ld/testsuite/ld-undefined/weak-undef.exp
new file mode 100644
index 00000000..b87c319d
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-undefined/weak-undef.exp
@@ -0,0 +1,81 @@
+# Test handling of weak undefined symbols
+# Copyright 2001, 2002, 2004
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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 {[which $objdump] == 0} then {
+ unresolved $testname
+ return
+ }
+
+ verbose -log "$objdump -s tmpdir/weak-undef"
+ catch "exec $objdump -s tmpdir/weak-undef" exec_output
+ 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.17/ld/testsuite/ld-undefined/weak-undef.s b/binutils-2.17/ld/testsuite/ld-undefined/weak-undef.s
new file mode 100644
index 00000000..dbdbaa22
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-undefined/weak-undef.s
@@ -0,0 +1,4 @@
+ .data
+ .weak foo
+ .long foo
+ .long 0x11111111
diff --git a/binutils-2.17/ld/testsuite/ld-undefined/weak-undef.t b/binutils-2.17/ld/testsuite/ld-undefined/weak-undef.t
new file mode 100644
index 00000000..a95bbcf1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-undefined/weak-undef.t
@@ -0,0 +1,9 @@
+SECTIONS
+{
+ .data : {
+ tmpdir/weak-undef.o(.data)
+ }
+ /DISCARD/ : {
+ *(*)
+ }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-v850/split-lo16.d b/binutils-2.17/ld/testsuite/ld-v850/split-lo16.d
new file mode 100644
index 00000000..c5668ffa
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-v850/split-lo16.ld b/binutils-2.17/ld/testsuite/ld-v850/split-lo16.ld
new file mode 100644
index 00000000..bde90630
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-v850/split-lo16.s b/binutils-2.17/ld/testsuite/ld-v850/split-lo16.s
new file mode 100644
index 00000000..7eaae412
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-v850/v850.exp b/binutils-2.17/ld/testsuite/ld-v850/v850.exp
new file mode 100644
index 00000000..59f184ac
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-v850/v850.exp
@@ -0,0 +1,3 @@
+if [istarget v850*-*-*] {
+ run_dump_test "split-lo16"
+}
diff --git a/binutils-2.17/ld/testsuite/ld-versados/t1-1.ro b/binutils-2.17/ld/testsuite/ld-versados/t1-1.ro
new file mode 100644
index 00000000..1d70d809
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-versados/t1-1.ro
Binary files differ
diff --git a/binutils-2.17/ld/testsuite/ld-versados/t1-2.ro b/binutils-2.17/ld/testsuite/ld-versados/t1-2.ro
new file mode 100644
index 00000000..8d4dc591
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-versados/t1-2.ro
Binary files differ
diff --git a/binutils-2.17/ld/testsuite/ld-versados/t1.ld b/binutils-2.17/ld/testsuite/ld-versados/t1.ld
new file mode 100644
index 00000000..1a5c4e3a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-versados/t1.ook b/binutils-2.17/ld/testsuite/ld-versados/t1.ook
new file mode 100644
index 00000000..3984b94e
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-versados/t2-1.ro b/binutils-2.17/ld/testsuite/ld-versados/t2-1.ro
new file mode 100644
index 00000000..633a7cc8
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-versados/t2-1.ro
Binary files differ
diff --git a/binutils-2.17/ld/testsuite/ld-versados/t2-2.ro b/binutils-2.17/ld/testsuite/ld-versados/t2-2.ro
new file mode 100644
index 00000000..704a79d9
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-versados/t2-2.ro
Binary files differ
diff --git a/binutils-2.17/ld/testsuite/ld-versados/t2-3.ro b/binutils-2.17/ld/testsuite/ld-versados/t2-3.ro
new file mode 100644
index 00000000..d9593421
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-versados/t2-3.ro
Binary files differ
diff --git a/binutils-2.17/ld/testsuite/ld-versados/t2.ld b/binutils-2.17/ld/testsuite/ld-versados/t2.ld
new file mode 100644
index 00000000..5e1e413d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-versados/t2.ook b/binutils-2.17/ld/testsuite/ld-versados/t2.ook
new file mode 100644
index 00000000..03f24a5f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-versados/versados.exp b/binutils-2.17/ld/testsuite/ld-versados/versados.exp
new file mode 100644
index 00000000..e921af32
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-versados/versados.exp
@@ -0,0 +1,99 @@
+# Expect script for ld-versados tests
+# Copyright 1995, 1997 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# 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.17/ld/testsuite/ld-x86-64/abs.d b/binutils-2.17/ld/testsuite/ld-x86-64/abs.d
new file mode 100644
index 00000000..b24b0186
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/pcrel16.d b/binutils-2.17/ld/testsuite/ld-x86-64/pcrel16.d
new file mode 100644
index 00000000..f5936572
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/pcrel8.d b/binutils-2.17/ld/testsuite/ld-x86-64/pcrel8.d
new file mode 100644
index 00000000..17a3bbac
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlsbin.dd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.dd
new file mode 100644
index 00000000..58bb5538
--- /dev/null
+++ b/binutils-2.17/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 10 00[ ]+add 1049556\(%rip\),%rax +# 5013e8 <.*>
+# -> 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 10 00[ ]+add 1049520\(%rip\),%rax +# 5013d8 <.*>
+# -> 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 0xf+60\(%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 0xf+80\(%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 0xf+a0\(%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[ ]+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 0xf+81\(%rax\),%rdx
+# sl1+1
+ 40107d: 90[ ]+nop *
+ 40107e: 90[ ]+nop *
+ 40107f: 4c 8d 88 86 ff ff ff[ ]+lea 0xf+86\(%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[ ]+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 0xf+a0\(%rax\),%rdx
+# sh1
+ 40109f: 90[ ]+nop *
+ 4010a0: 90[ ]+nop *
+ 4010a1: 48 8d 88 a7 ff ff ff[ ]+lea 0xf+a7\(%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 10 00[ ]+add 1049370\(%rip\),%r9 +# 5013d8 <.*>
+# -> 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 0xf+60\(%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 0xf+80\(%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 0xf+a0\(%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 10 00[ ]+mov 1049285\(%rip\),%rcx +# 5013d0 <.*>
+# -> 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 10 00[ ]+add 1049230\(%rip\),%r11 +# 5013e0 <.*>
+# -> 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 0xf+d4\(%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 0xf+b4\(%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 0xf+64\(%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.17/ld/testsuite/ld-x86-64/tlsbin.rd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.rd
new file mode 100644
index 00000000..dc3ef22b
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.rd
@@ -0,0 +1,150 @@
+#source: tlsbinpic.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#readelf: -WSsrl
+#target: x86_64-*-*
+
+There are 17 section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ \[ 0\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ \[ 1\] .interp +.*
+ \[ 2\] .hash +.*
+ \[ 3\] .dynsym +.*
+ \[ 4\] .dynstr +.*
+ \[ 5\] .rela.dyn +.*
+ \[ 6\] .rela.plt +.*
+ \[ 7\] .plt +.*
+ \[ 8\] .text +PROGBITS +0+401000 0+1000 0+22a 00 +AX +0 +0 +4096
+ \[ 9\] .tdata +PROGBITS +0+50122a 0+122a 0+60 00 WAT +0 +0 +1
+ \[10\] .tbss +NOBITS +0+50128a 0+128a 0+40 00 WAT +0 +0 +1
+ \[11\] .dynamic +DYNAMIC +0+501290 0+1290 0+140 10 +WA +4 +0 +8
+ \[12\] .got +PROGBITS +0+5013d0 0+13d0 0+20 08 +WA +0 +0 +8
+ \[13\] .got.plt +PROGBITS +0+5013f0 0+13f0 0+20 08 +WA +0 +0 +8
+ \[14\] .shstrtab +.*
+ \[15\] .symtab +.*
+ \[16\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x40113c
+There are 6 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 0x100000
+ LOAD +0x0+122a 0x0+50122a 0x0+50122a 0x0+1e6 0x0+1e6 RW 0x100000
+ DYNAMIC +0x0+1290 0x0+501290 0x0+501290 0x0+140 0x0+140 RW 0x8
+ TLS +0x0+122a 0x0+50122a 0x0+50122a 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 69 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 *
+.* SECTION LOCAL DEFAULT +16 *
+.* 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 HIDDEN +11 _DYNAMIC
+.* OBJECT LOCAL HIDDEN +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.17/ld/testsuite/ld-x86-64/tlsbin.s b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.s
new file mode 100644
index 00000000..eb9bfbc8
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlsbin.sd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.sd
new file mode 100644
index 00000000..8095b596
--- /dev/null
+++ b/binutils-2.17/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:
+ 5013d0 00000000 00000000 00000000 00000000 .*
+ 5013e0 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.td b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbin.td
new file mode 100644
index 00000000..e0d75981
--- /dev/null
+++ b/binutils-2.17/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:
+ 50122a 11000000 12000000 13000000 14000000 .*
+ 50123a 15000000 16000000 17000000 18000000 .*
+ 50124a 41000000 42000000 43000000 44000000 .*
+ 50125a 45000000 46000000 47000000 48000000 .*
+ 50126a 01010000 02010000 03010000 04010000 .*
+ 50127a 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.dd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.dd
new file mode 100644
index 00000000..c41efecf
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.dd
@@ -0,0 +1,307 @@
+#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 10 00[ ]+mov 1049445\(%rip\),%rax +# 501370 <.*>
+# -> R_X86_64_TPOFF64 sG1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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 10 00[ ]+mov 1049416\(%rip\),%rax +# 501360 <.*>
+# -> 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 *
+ [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]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [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 60 ff ff ff[ ]+mov \$0xf+60,%rax
+ [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 90 81 ff ff ff[ ]+lea 0xf+81\(%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 0xf+86\(%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 0xf+a0\(%rax\),%rdx
+# sh1
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 90[ ]+nop *
+ [0-9a-f]+: 48 8d 88 a7 ff ff ff[ ]+lea 0xf+a7\(%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 10 00[ ]+add 1049302\(%rip\),%r9 +# 501360 <.*>
+# -> 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 0xf+60\(%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 0xf+80\(%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 0xf+a0\(%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 10 00[ ]+mov 1049217\(%rip\),%rcx +# 501358 <.*>
+# -> 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 10 00[ ]+add 1049162\(%rip\),%r11 +# 501368 <.*>
+# -> 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 0xf+d4\(%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 0xf+b4\(%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 0xf+64\(%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.17/ld/testsuite/ld-x86-64/tlsbindesc.rd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.rd
new file mode 100644
index 00000000..787002d1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.rd
@@ -0,0 +1,141 @@
+#source: tlsbindesc.s
+#source: tlsbin.s
+#as: --64
+#ld: -shared -melf_x86_64
+#readelf: -WSsrl
+#target: x86_64-*-*
+
+There are 15 section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ \[ 0\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ \[ 1\] .interp +.*
+ \[ 2\] .hash +.*
+ \[ 3\] .dynsym +.*
+ \[ 4\] .dynstr +.*
+ \[ 5\] .rela.dyn +.*
+ \[ 6\] .text +PROGBITS +0+401000 0+1000 0+1f6 00 +AX +0 +0 +4096
+ \[ 7\] .tdata +PROGBITS +0+5011f6 0+11f6 0+60 00 WAT +0 +0 +1
+ \[ 8\] .tbss +NOBITS +0+501256 0+1256 0+40 00 WAT +0 +0 +1
+ \[ 9\] .dynamic +DYNAMIC +0+501258 0+1258 0+100 10 +WA +4 +0 +8
+ \[10\] .got +PROGBITS +0+501358 0+1358 0+20 08 +WA +0 +0 +8
+ \[11\] .got.plt +PROGBITS +0+501378 0+1378 0+18 08 +WA +0 +0 +8
+ \[12\] .shstrtab +.*
+ \[13\] .symtab +.*
+ \[14\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x401108
+There are 6 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 0x100000
+ LOAD +0x0+11f6 0x0+5011f6 0x0+5011f6 0x0+19a 0x0+19a RW 0x100000
+ DYNAMIC +0x0+1258 0x0+501258 0x0+501258 0x0+100 0x0+100 RW 0x8
+ TLS +0x0+11f6 0x0+5011f6 0x0+5011f6 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+501358 0+100000012 R_X86_64_TPOFF64 +0+ sG5 \+ 0
+0+501360 0+200000012 R_X86_64_TPOFF64 +0+ sG2 \+ 0
+0+501368 0+400000012 R_X86_64_TPOFF64 +0+ sG6 \+ 0
+0+501370 0+500000012 R_X86_64_TPOFF64 +0+ sG1 \+ 0
+
+Symbol table '.dynsym' contains 8 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 67 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 SECTION LOCAL DEFAULT +14 *
+ +[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+0 +0 TLS +LOCAL HIDDEN +7 _TLS_MODULE_BASE_
+ +[0-9]+: 0+501258 +0 OBJECT LOCAL HIDDEN 9 _DYNAMIC
+ +[0-9]+: 0+501378 +0 OBJECT LOCAL HIDDEN 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.17/ld/testsuite/ld-x86-64/tlsbindesc.s b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.s
new file mode 100644
index 00000000..cbebf021
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlsbindesc.sd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.sd
new file mode 100644
index 00000000..fd0519fb
--- /dev/null
+++ b/binutils-2.17/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:
+ 501358 00000000 00000000 00000000 00000000 .*
+ 501368 00000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.td b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbindesc.td
new file mode 100644
index 00000000..226e52e6
--- /dev/null
+++ b/binutils-2.17/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:
+ 5011f6 11000000 12000000 13000000 14000000 .*
+ 501206 15000000 16000000 17000000 18000000 .*
+ 501216 41000000 42000000 43000000 44000000 .*
+ 501226 45000000 46000000 47000000 48000000 .*
+ 501236 01010000 02010000 03010000 04010000 .*
+ 501246 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-x86-64/tlsbinpic.s b/binutils-2.17/ld/testsuite/ld-x86-64/tlsbinpic.s
new file mode 100644
index 00000000..2819a8ff
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlsdesc.dd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.dd
new file mode 100644
index 00000000..656e2411
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.dd
@@ -0,0 +1,204 @@
+#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 10 00[ ]+lea 1049481\(%rip\),%rax +# 101398 <.*>
+# -> 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 10 00[ ]+mov 1049372\(%rip\),%rax +# 101338 <.*>
+# -> 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 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD against local variable
+ +[0-9a-f]+: 48 8d 05 3f 03 10 00[ ]+lea 1049407\(%rip\),%rax +# 101368 <.*>
+# -> 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 10 00[ ]+mov 1049298\(%rip\),%rax +# 101308 <.*>
+# -> 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 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD against hidden and local variable
+ +[0-9a-f]+: 48 8d 05 65 03 10 00[ ]+lea 1049445\(%rip\),%rax +# 1013a8 <.*>
+# -> 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 10 00[ ]+mov 1049328\(%rip\),%rax +# 101340 <.*>
+# -> 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 *
+ +[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 10 00[ ]+lea 1049371\(%rip\),%rax +# 101378 <.*>
+# -> 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 10 00[ ]+mov 1049262\(%rip\),%rax +# 101318 <.*>
+# -> 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 *
+ +[0-9a-f]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# LD
+ +[0-9a-f]+: 48 8d 05 11 03 10 00[ ]+lea 1049361\(%rip\),%rax +# 101388 <.*>
+# -> 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 10 00[ ]+add 1049201\(%rip\),%rcx +# 101338 <.*>
+# -> 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 10 00[ ]+add 1049131\(%rip\),%r14 +# 101308 <.*>
+# -> 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 10 00[ ]+add 1049165\(%rip\),%rcx +# 101340 <.*>
+# -> 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 10 00[ ]+add 1049103\(%rip\),%rcx +# 101318 <.*>
+# -> 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 10 00[ ]+mov 1049100\(%rip\),%rcx +# 101320 <.*>
+# -> 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 10 00[ ]+mov 1049067\(%rip\),%r10 +# 101310 <.*>
+# -> 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 10 00[ ]+mov 1049074\(%rip\),%rdx +# 101328 <.*>
+# -> 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 10 00[ ]+mov 1049065\(%rip\),%rcx +# 101330 <.*>
+# -> 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.17/ld/testsuite/ld-x86-64/tlsdesc.pd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.pd
new file mode 100644
index 00000000..aea1bab4
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.pd
@@ -0,0 +1,26 @@
+#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:
+
+0000000000000470 <.*@plt-0x10>:
+ 470: ff 35 e2 0e 10 00 pushq 1052386\(%rip\) # 101358 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ 476: ff 25 e4 0e 10 00 jmpq \*1052388\(%rip\) # 101360 <_GLOBAL_OFFSET_TABLE_\+0x10>
+ 47c: 90 nop *
+ 47d: 90 nop *
+ 47e: 90 nop *
+ 47f: 90 nop *
+0000000000000480 <.*@plt>:
+ 480: ff 35 d2 0e 10 00 pushq 1052370\(%rip\) # 101358 <_GLOBAL_OFFSET_TABLE_\+0x8>
+ 486: ff 25 bc 0e 10 00 jmpq \*1052348\(%rip\) # 101348 <_DYNAMIC\+0x190>
+ 48c: 90 nop *
+ 48d: 90 nop *
+ 48e: 90 nop *
+ 48f: 90 nop *
+
diff --git a/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.rd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.rd
new file mode 100644
index 00000000..e7e21ed1
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.rd
@@ -0,0 +1,164 @@
+#source: tlsdesc.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#readelf: -WSsrld
+#target: x86_64-*-*
+
+There are 16 section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ \[ 0\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ \[ 1\] .hash +.*
+ \[ 2\] .dynsym +.*
+ \[ 3\] .dynstr +.*
+ \[ 4\] .rela.dyn +.*
+ \[ 5\] .rela.plt +.*
+ \[ 6\] .plt +PROGBITS +0+470 0+470 0+20 10 +AX +0 +0 +4
+ \[ 7\] .text +PROGBITS +0+1000 0+1000 0+154 00 +AX +0 +0 4096
+ \[ 8\] .tdata +PROGBITS +0+101154 0+1154 0+60 00 WAT +0 +0 +1
+ \[ 9\] .tbss +NOBITS +0+1011b4 0+11b4 0+20 00 WAT +0 +0 +1
+ \[10\] .dynamic +DYNAMIC +0+1011b8 0+11b8 0+150 10 +WA +3 +0 +8
+ \[11\] .got +PROGBITS +0+101308 0+1308 0+48 08 +WA +0 +0 +8
+ \[12\] .got.plt +PROGBITS +0+101350 0+1350 0+68 08 +WA +0 +0 +8
+ \[13\] .shstrtab +.*
+ \[14\] .symtab +.*
+ \[15\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are 4 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 0x100000
+ LOAD +0x0+1154 0x0+101154 0x0+101154 0x0+264 0x0+264 RW +0x100000
+ DYNAMIC +0x0+11b8 0x0+1011b8 0x0+1011b8 0x0+150 0x0+150 RW +0x8
+ TLS +0x0+1154 0x0+101154 0x0+101154 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\) +0x480
+ 0x[0-9a-f]+ +\(TLSDESC_GOT\) +0x101348
+ 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+101308 0+12 R_X86_64_TPOFF64 +0+24
+0+101310 0+12 R_X86_64_TPOFF64 +0+30
+0+101318 0+12 R_X86_64_TPOFF64 +0+64
+0+101328 0+12 R_X86_64_TPOFF64 +0+50
+0+101330 0+12 R_X86_64_TPOFF64 +0+70
+0+101340 0+12 R_X86_64_TPOFF64 +0+44
+0+101320 0+700000012 R_X86_64_TPOFF64 +0+10 sg5 \+ 0
+0+101338 0+b00000012 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+101398 0+800000024 R_X86_64_TLSDESC +0+ sg1 \+ 0
+0+101368 0+24 R_X86_64_TLSDESC +0+20
+0+1013a8 0+24 R_X86_64_TLSDESC +0+40
+0+101378 0+24 R_X86_64_TLSDESC +0+60
+0+101388 0+24 R_X86_64_TLSDESC +0+
+
+Symbol table '.dynsym' contains 16 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-9a-f]+ +0 SECTION LOCAL DEFAULT +9 *
+ +[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 55 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 SECTION LOCAL DEFAULT +14 *
+ +[0-9]+: [0-9a-f]+ +0 SECTION LOCAL DEFAULT +15 *
+ +[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 HIDDEN +9 sH1
+ +[0-9]+: 0+ +0 TLS +LOCAL HIDDEN +8 _TLS_MODULE_BASE_
+ +[0-9]+: 0+1011b8 +0 OBJECT LOCAL HIDDEN ABS _DYNAMIC
+ +[0-9]+: 0+48 +0 TLS +LOCAL HIDDEN +8 sh3
+ +[0-9]+: 0+64 +0 TLS +LOCAL HIDDEN +9 sH2
+ +[0-9]+: 0+78 +0 TLS +LOCAL HIDDEN +9 sH7
+ +[0-9]+: 0+58 +0 TLS +LOCAL HIDDEN +8 sh7
+ +[0-9]+: 0+5c +0 TLS +LOCAL HIDDEN +8 sh8
+ +[0-9]+: 0+6c +0 TLS +LOCAL HIDDEN +9 sH4
+ +[0-9]+: 0+4c +0 TLS +LOCAL HIDDEN +8 sh4
+ +[0-9]+: 0+68 +0 TLS +LOCAL HIDDEN +9 sH3
+ +[0-9]+: 0+50 +0 TLS +LOCAL HIDDEN +8 sh5
+ +[0-9]+: 0+70 +0 TLS +LOCAL HIDDEN +9 sH5
+ +[0-9]+: 0+74 +0 TLS +LOCAL HIDDEN +9 sH6
+ +[0-9]+: 0+7c +0 TLS +LOCAL HIDDEN +9 sH8
+ +[0-9]+: 0+40 +0 TLS +LOCAL HIDDEN +8 sh1
+ +[0-9]+: 0+101350 +0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+ +[0-9]+: 0+44 +0 TLS +LOCAL HIDDEN +8 sh2
+ +[0-9]+: 0+54 +0 TLS +LOCAL HIDDEN +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.17/ld/testsuite/ld-x86-64/tlsdesc.s b/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.s
new file mode 100644
index 00000000..ec6d190d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlsdesc.sd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.sd
new file mode 100644
index 00000000..8eb5d9cd
--- /dev/null
+++ b/binutils-2.17/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:
+ 101308 00000000 00000000 00000000 00000000 .*
+ 101318 00000000 00000000 00000000 00000000 .*
+ 101328 00000000 00000000 00000000 00000000 .*
+ 101338 00000000 00000000 00000000 00000000 .*
+ 101348 00000000 00000000 .*
+Contents of section \.got\.plt:
+ 101350 b8111000 00000000 00000000 00000000 .*
+ 101360 00000000 00000000 00000000 00000000 .*
+ 101370 00000000 00000000 00000000 00000000 .*
+ 101380 00000000 00000000 00000000 00000000 .*
+ 101390 00000000 00000000 00000000 00000000 .*
+ 1013a0 00000000 00000000 00000000 00000000 .*
+ 1013b0 00000000 00000000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.td b/binutils-2.17/ld/testsuite/ld-x86-64/tlsdesc.td
new file mode 100644
index 00000000..dd79816c
--- /dev/null
+++ b/binutils-2.17/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:
+ 101154 11000000 12000000 13000000 14000000 .*
+ 101164 15000000 16000000 17000000 18000000 .*
+ 101174 41000000 42000000 43000000 44000000 .*
+ 101184 45000000 46000000 47000000 48000000 .*
+ 101194 01010000 02010000 03010000 04010000 .*
+ 1011a4 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-x86-64/tlsg.s b/binutils-2.17/ld/testsuite/ld-x86-64/tlsg.s
new file mode 100644
index 00000000..048e98f0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlsg.sd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsg.sd
new file mode 100644
index 00000000..4eaf3cdf
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlsgdesc.dd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsgdesc.dd
new file mode 100644
index 00000000..b0e7c058
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/tlsgdesc.dd
@@ -0,0 +1,167 @@
+#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 10 00[ ]+add 1049182\(%rip\),%rcx +# 100660 <.*>
+# -> 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 10 00[ ]+add 1049192\(%rip\),%rcx +# 100680 <.*>
+# -> 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 10[ ]+lea 1049196\(%rip\),%rdi +# 100690 <.*>
+ +[0-9a-f]+: 00 *
+# -> R_X86_64_DTPMOD64 sG1
+ +[0-9a-f]+: 66 66 48 e8 9c ff ff[ ]+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 10 00[ ]+lea 1049249\(%rip\),%rax +# 1006d8 <.*>
+# -> 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 10 00[ ]+lea 1049220\(%rip\),%rax +# 1006c8 <.*>
+# -> 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 10[ ]+lea 1049118\(%rip\),%rdi +# 100670 <.*>
+ +[0-9a-f]+: 00 *
+# -> R_X86_64_DTPMOD64 sG2
+ +[0-9a-f]+: 66 66 48 e8 6e ff ff[ ]+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 10 00[ ]+add 1049074\(%rip\),%rax +# 100660 <.*>
+# -> 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 10 00[ ]+mov 1049063\(%rip\),%rax +# 100660 <.*>
+# -> 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]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE, desc first, after IE use
+ +[0-9a-f]+: 48 8b 05 fa 01 10 00[ ]+mov 1049082\(%rip\),%rax +# 100680 <.*>
+# -> 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 *
+ +[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 10 00[ ]+add 1049060\(%rip\),%rax +# 100680 <.*>
+# -> 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 10 00[ ]+add 1049016\(%rip\),%rax +# 100668 <.*>
+# -> 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 10 00[ ]+mov 1049005\(%rip\),%rax +# 100668 <.*>
+# -> 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]+: 90[ ]+nop *
+ +[0-9a-f]+: 90[ ]+nop *
+# GD -> IE, desc first, before IE use
+ +[0-9a-f]+: 48 8b 05 c0 01 10 00[ ]+mov 1049024\(%rip\),%rax +# 100688 <.*>
+# -> 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]+: 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 10 00[ ]+add 1049002\(%rip\),%rax +# 100688 <.*>
+# -> 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 10 00[ ]+add 1048948\(%rip\),%rcx +# 100668 <.*>
+# -> 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 10 00[ ]+add 1048958\(%rip\),%rcx +# 100688 <.*>
+# -> 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.17/ld/testsuite/ld-x86-64/tlsgdesc.rd b/binutils-2.17/ld/testsuite/ld-x86-64/tlsgdesc.rd
new file mode 100644
index 00000000..2f7621b0
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/tlsgdesc.rd
@@ -0,0 +1,107 @@
+#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.*:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +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 +.*
+ \[ 8\] \.dynamic +.*
+ \[ 9\] \.got +.*
+ \[10\] \.got.plt +.*
+ \[11\] \.shstrtab +.*
+ \[12\] \.symtab +.*
+ \[13\] \.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 13 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 27 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 OBJECT LOCAL HIDDEN ABS _DYNAMIC
+ +[0-9]+: [0-9a-f]+ +0 OBJECT LOCAL HIDDEN 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.17/ld/testsuite/ld-x86-64/tlsgdesc.s b/binutils-2.17/ld/testsuite/ld-x86-64/tlsgdesc.s
new file mode 100644
index 00000000..6657e72a
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlslib.s b/binutils-2.17/ld/testsuite/ld-x86-64/tlslib.s
new file mode 100644
index 00000000..9eccc080
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlspic.dd b/binutils-2.17/ld/testsuite/ld-x86-64/tlspic.dd
new file mode 100644
index 00000000..28d8418e
--- /dev/null
+++ b/binutils-2.17/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 10[ ]+lea 1049472\(%rip\),%rdi +# 101390 <.*>
+ +100f: 00 *
+# -> R_X86_64_DTPMOD64 sg1
+ +1010: 66 66 48 e8 [0-9a-f ]+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 10 00[ ]+add 1049476\(%rip\),%rax +# 1013b0 <.*>
+# -> 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 10[ ]+lea 1049352\(%rip\),%rdi +# 101340 <.*>
+ +1037: 00 *
+# -> R_X86_64_DTPMOD64 [0 0x2000000000000000]
+ +1038: 66 66 48 e8 [0-9a-f ]+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 10 00[ ]+add 1049340\(%rip\),%rax +# 101350 <.*>
+# -> 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 10[ ]+lea 1049432\(%rip\),%rdi +# 1013b8 <.*>
+ +105f: 00 *
+# -> R_X86_64_DTPMOD64 [0 0x4000000000000000]
+ +1060: 66 66 48 e8 [0-9a-f ]+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 10 00[ ]+add 1049420\(%rip\),%rax +# 1013c8 <.*>
+# -> 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 10[ ]+lea 1049320\(%rip\),%rdi +# 101370 <.*>
+ +1087: 00 *
+# -> R_X86_64_DTPMOD64 [0 0x6000000000000000]
+ +1088: 66 66 48 e8 [0-9a-f ]+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 10 00[ ]+add 1049308\(%rip\),%rax +# 101380 <.*>
+# -> 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 10 00[ ]+lea 1049265\(%rip\),%rdi +# 101360 <.*>
+# -> 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 10 00[ ]+lea 1049231\(%rip\),%rdi +# 101360 <.*>
+# -> 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 10 00[ ]+lea 1049197\(%rip\),%rdi +# 101360 <.*>
+# -> 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 10 00[ ]+add 1049234\(%rip\),%rcx +# 1013b0 <.*>
+# -> 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 10 00[ ]+add 1049116\(%rip\),%r14 +# 101350 <.*>
+# -> 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 10 00[ ]+add 1049214\(%rip\),%rcx +# 1013c8 <.*>
+# -> 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 10 00[ ]+add 1049120\(%rip\),%rcx +# 101380 <.*>
+# -> 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 10 00[ ]+mov 1049117\(%rip\),%rcx +# 101388 <.*>
+# -> 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 10 00[ ]+mov 1049052\(%rip\),%r10 +# 101358 <.*>
+# -> 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 10 00[ ]+mov 1049107\(%rip\),%rdx +# 1013a0 <.*>
+# -> 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 10 00[ ]+mov 1049098\(%rip\),%rcx +# 1013a8 <.*>
+# -> 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.17/ld/testsuite/ld-x86-64/tlspic.rd b/binutils-2.17/ld/testsuite/ld-x86-64/tlspic.rd
new file mode 100644
index 00000000..286fbf2c
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/tlspic.rd
@@ -0,0 +1,148 @@
+#source: tlspic1.s
+#source: tlspic2.s
+#as: --64
+#ld: -shared -melf_x86_64
+#readelf: -WSsrl
+#target: x86_64-*-*
+
+There are 16 section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+ \[Nr\] Name +Type +Address +Off +Size +ES Flg Lk Inf Al
+ \[ 0\] +NULL +0+ 0+ 0+ 00 +0 +0 +0
+ \[ 1\] .hash +.*
+ \[ 2\] .dynsym +.*
+ \[ 3\] .dynstr +.*
+ \[ 4\] .rela.dyn +.*
+ \[ 5\] .rela.plt +.*
+ \[ 6\] .plt +.*
+ \[ 7\] .text +PROGBITS +0+1000 0+1000 0+1ac 00 +AX +0 +0 4096
+ \[ 8\] .tdata +PROGBITS +0+1011ac 0+11ac 0+60 00 WAT +0 +0 +1
+ \[ 9\] .tbss +NOBITS +0+10120c 0+120c 0+20 00 WAT +0 +0 +1
+ \[10\] .dynamic +DYNAMIC +0+101210 0+1210 0+130 10 +WA +3 +0 +8
+ \[11\] .got +PROGBITS +0+101340 0+1340 0+90 08 +WA +0 +0 +8
+ \[12\] .got.plt +PROGBITS +0+1013d0 0+13d0 0+20 08 +WA +0 +0 +8
+ \[13\] .shstrtab +.*
+ \[14\] .symtab +.*
+ \[15\] .strtab +.*
+Key to Flags:
+.*
+.*
+.*
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x1000
+There are 4 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 0x100000
+ LOAD +0x0+11ac 0x0+1011ac 0x0+1011ac 0x0+244 0x0+244 RW +0x100000
+ DYNAMIC +0x0+1210 0x0+101210 0x0+101210 0x0+130 0x0+130 RW +0x8
+ TLS +0x0+11ac 0x0+1011ac 0x0+1011ac 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 *
+.* SECTION LOCAL DEFAULT +9 *
+.* 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 55 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 +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 HIDDEN +9 sH1
+.* OBJECT +LOCAL +HIDDEN +ABS _DYNAMIC
+.* TLS +LOCAL HIDDEN +8 sh3
+.* TLS +LOCAL HIDDEN +9 sH2
+.* TLS +LOCAL HIDDEN +9 sH7
+.* TLS +LOCAL HIDDEN +8 sh7
+.* TLS +LOCAL HIDDEN +8 sh8
+.* TLS +LOCAL HIDDEN +9 sH4
+.* TLS +LOCAL HIDDEN +8 sh4
+.* TLS +LOCAL HIDDEN +9 sH3
+.* TLS +LOCAL HIDDEN +8 sh5
+.* TLS +LOCAL HIDDEN +9 sH5
+.* TLS +LOCAL HIDDEN +9 sH6
+.* TLS +LOCAL HIDDEN +9 sH8
+.* TLS +LOCAL HIDDEN +8 sh1
+.* OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+.* TLS +LOCAL HIDDEN +8 sh2
+.* TLS +LOCAL HIDDEN +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.17/ld/testsuite/ld-x86-64/tlspic.sd b/binutils-2.17/ld/testsuite/ld-x86-64/tlspic.sd
new file mode 100644
index 00000000..831f0e5f
--- /dev/null
+++ b/binutils-2.17/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:
+ 101340 00000000 00000000 20000000 00000000 .*
+ 101350 00000000 00000000 00000000 00000000 .*
+ 101360 00000000 00000000 00000000 00000000 .*
+ 101370 00000000 00000000 60000000 00000000 .*
+ 101380 00000000 00000000 00000000 00000000 .*
+ 101390 00000000 00000000 00000000 00000000 .*
+ 1013a0 00000000 00000000 00000000 00000000 .*
+ 1013b0 00000000 00000000 00000000 00000000 .*
+ 1013c0 40000000 00000000 00000000 00000000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-x86-64/tlspic.td b/binutils-2.17/ld/testsuite/ld-x86-64/tlspic.td
new file mode 100644
index 00000000..d3df20c9
--- /dev/null
+++ b/binutils-2.17/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:
+ 1011ac 11000000 12000000 13000000 14000000 .*
+ 1011bc 15000000 16000000 17000000 18000000 .*
+ 1011cc 41000000 42000000 43000000 44000000 .*
+ 1011dc 45000000 46000000 47000000 48000000 .*
+ 1011ec 01010000 02010000 03010000 04010000 .*
+ 1011fc 05010000 06010000 07010000 08010000 .*
diff --git a/binutils-2.17/ld/testsuite/ld-x86-64/tlspic1.s b/binutils-2.17/ld/testsuite/ld-x86-64/tlspic1.s
new file mode 100644
index 00000000..5e26f26c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/tlspic2.s b/binutils-2.17/ld/testsuite/ld-x86-64/tlspic2.s
new file mode 100644
index 00000000..5513f9b5
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-x86-64/x86-64.exp b/binutils-2.17/ld/testsuite/ld-x86-64/x86-64.exp
new file mode 100644
index 00000000..5285f3ef
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-x86-64/x86-64.exp
@@ -0,0 +1,72 @@
+# Expect script for ld-x86_64 tests
+# Copyright (C) 2002, 2005, 2006 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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"}
+}
+
+run_ld_link_tests $x86_64tests
+
+run_dump_test "abs"
+run_dump_test "pcrel8"
+run_dump_test "pcrel16"
diff --git a/binutils-2.17/ld/testsuite/ld-xc16x/absrel.d b/binutils-2.17/ld/testsuite/ld-xc16x/absrel.d
new file mode 100644
index 00000000..a6941c22
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xc16x/absrel.s b/binutils-2.17/ld/testsuite/ld-xc16x/absrel.s
new file mode 100644
index 00000000..3bfe70e1
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xc16x/offset.d b/binutils-2.17/ld/testsuite/ld-xc16x/offset.d
new file mode 100644
index 00000000..a879c443
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xc16x/offset.s b/binutils-2.17/ld/testsuite/ld-xc16x/offset.s
new file mode 100644
index 00000000..b3aad190
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xc16x/pcreloc.d b/binutils-2.17/ld/testsuite/ld-xc16x/pcreloc.d
new file mode 100644
index 00000000..8f363b5f
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xc16x/pcreloc.s b/binutils-2.17/ld/testsuite/ld-xc16x/pcreloc.s
new file mode 100644
index 00000000..ed77101d
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xc16x/pcrelocl.d b/binutils-2.17/ld/testsuite/ld-xc16x/pcrelocl.d
new file mode 100644
index 00000000..48d9c828
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xc16x/xc16x.exp b/binutils-2.17/ld/testsuite/ld-xc16x/xc16x.exp
new file mode 100644
index 00000000..57326499
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-xc16x/xc16x.exp
@@ -0,0 +1,65 @@
+# Expect script for ld-xstormy16 tests
+# Copyright (C) 2003 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+# 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.17/ld/testsuite/ld-xstormy16/external.s b/binutils-2.17/ld/testsuite/ld-xstormy16/external.s
new file mode 100644
index 00000000..2907e9e4
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xstormy16/pcrel.d b/binutils-2.17/ld/testsuite/ld-xstormy16/pcrel.d
new file mode 100644
index 00000000..4eac7b24
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xstormy16/pcrel.s b/binutils-2.17/ld/testsuite/ld-xstormy16/pcrel.s
new file mode 100644
index 00000000..6128e516
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xstormy16/xstormy16.exp b/binutils-2.17/ld/testsuite/ld-xstormy16/xstormy16.exp
new file mode 100644
index 00000000..b26e3681
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-xstormy16/xstormy16.exp
@@ -0,0 +1,38 @@
+# Expect script for ld-xstormy16 tests
+# Copyright (C) 2003 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# 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.17/ld/testsuite/ld-xtensa/coalesce.exp b/binutils-2.17/ld/testsuite/ld-xtensa/coalesce.exp
new file mode 100644
index 00000000..fecb4936
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-xtensa/coalesce.exp
@@ -0,0 +1,97 @@
+# Test literal coaslescing for Xtensa targets.
+# By David Heine, Tensilica, Inc.
+# Copyright 2002, 2003
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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.17/ld/testsuite/ld-xtensa/coalesce.t b/binutils-2.17/ld/testsuite/ld-xtensa/coalesce.t
new file mode 100644
index 00000000..7bff69fc
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-xtensa/coalesce.t
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ .text 0x00000000 : {
+ *(.literal .text)
+ }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-xtensa/coalesce1.s b/binutils-2.17/ld/testsuite/ld-xtensa/coalesce1.s
new file mode 100644
index 00000000..43744637
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xtensa/coalesce2.s b/binutils-2.17/ld/testsuite/ld-xtensa/coalesce2.s
new file mode 100644
index 00000000..7c9a83d0
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xtensa/lcall.exp b/binutils-2.17/ld/testsuite/ld-xtensa/lcall.exp
new file mode 100644
index 00000000..035f5d53
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-xtensa/lcall.exp
@@ -0,0 +1,111 @@
+# Test Xtensa longcall optimization.
+# By David Heine, Tensilica, Inc.
+# Copyright 2002, 2003
+# Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+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.17/ld/testsuite/ld-xtensa/lcall.t b/binutils-2.17/ld/testsuite/ld-xtensa/lcall.t
new file mode 100644
index 00000000..7bff69fc
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/ld-xtensa/lcall.t
@@ -0,0 +1,6 @@
+SECTIONS
+{
+ .text 0x00000000 : {
+ *(.literal .text)
+ }
+}
diff --git a/binutils-2.17/ld/testsuite/ld-xtensa/lcall1.s b/binutils-2.17/ld/testsuite/ld-xtensa/lcall1.s
new file mode 100644
index 00000000..34393195
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/ld-xtensa/lcall2.s b/binutils-2.17/ld/testsuite/ld-xtensa/lcall2.s
new file mode 100644
index 00000000..d697096c
--- /dev/null
+++ b/binutils-2.17/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.17/ld/testsuite/lib/ld-lib.exp b/binutils-2.17/ld/testsuite/lib/ld-lib.exp
new file mode 100644
index 00000000..a0e734eb
--- /dev/null
+++ b/binutils-2.17/ld/testsuite/lib/ld-lib.exp
@@ -0,0 +1,1343 @@
+# Support routines for LD testsuite.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+# 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Extract and print the version number of ld.
+#
+proc default_ld_version { ld } {
+ global host_triplet
+
+ if { [which $ld] == 0 } then {
+ perror "$ld does not exist"
+ exit 1
+ }
+
+ catch "exec $ld --version" tmp
+ set tmp [prune_warnings $tmp]
+ regexp "\[^\n\]* (cygnus-|)(\[-0-9.a-zA-Z-\]+)\[\r\n\].*" $tmp version cyg number
+ if [info exists number] then {
+ clone_output "$ld $number\n"
+ }
+}
+
+# Link an object using relocation.
+#
+proc default_ld_relocate { ld target objects } {
+ global HOSTING_EMU
+ global host_triplet
+
+ if { [which $ld] == 0 } then {
+ perror "$ld does not exist"
+ return 0
+ }
+
+ verbose -log "$ld $HOSTING_EMU -o $target -r $objects"
+
+ catch "exec $ld $HOSTING_EMU -o $target -r $objects" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+ return 1
+ } else {
+ verbose -log "$exec_output"
+ return 0
+ }
+}
+
+# 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} {
+ set flags " -EB"
+ return $flags
+ }
+ {*little*endian el EL -el -EL -ml} {
+ 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
+
+ set objs "$HOSTING_CRT0 $objects"
+ set libs "$LIBS $HOSTING_LIBS"
+
+ 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 $HOSTING_EMU $flags -o $target $objs $libs"
+
+ catch "exec $ld $HOSTING_EMU $flags -o $target $objs $libs" link_output
+ set exec_output [prune_warnings $link_output]
+ if [string match "" $link_output] then {
+ return 1
+ } else {
+ verbose -log "$link_output"
+ return 0
+ }
+}
+
+# Link a program using ld, without including any libraries.
+#
+proc default_ld_simple_link { ld target objects } {
+ global host_triplet
+ global link_output
+ global gcc_ld_flag
+
+ 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 ""
+ }
+
+ # 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]
+ if { $ldparm > 0 } then {
+ set ldexe [string range $ld 0 $ldparm]
+ }
+ set ldexe [string replace $ldexe 0 [string last "/" $ldexe] ""]
+ if {[string match "*gcc*" $ldexe] || [string match "*++*" $ldexe]} then {
+ set flags "$gcc_ld_flag $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
+
+ if [string match "" $exec_output] then {
+ return 1
+ } else {
+ verbose -log "$exec_output"
+ return 0
+ }
+}
+
+# Compile an object using cc.
+#
+proc default_ld_compile { cc source object } {
+ global CFLAGS
+ 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 {[which $cc_prog] == 0} then {
+ perror "$cc_prog does not exist"
+ return 0
+ }
+
+ catch "exec rm -f $object" exec_output
+
+ set flags "-I$srcdir/$subdir $CFLAGS"
+
+ # 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 [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"
+
+ catch "exec $cc $flags $ccflags -c $source -o $object" exec_output
+ 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 {[file exists $realobj]} then {
+ verbose -log "mv $realobj $object"
+ catch "exec mv $realobj $object" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if {![string match "" $exec_output]} then {
+ verbose -log "$exec_output"
+ perror "could not move $realobj to $object"
+ return 0
+ }
+ } 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 {[which $as] == 0} then {
+ perror "$as does not exist"
+ return 0
+ }
+
+ if ![info exists ASFLAGS] { set ASFLAGS "" }
+
+ set flags [big_or_little_endian]
+
+ verbose -log "$as $flags $ASFLAGS -o $object $source"
+
+ catch "exec $as $flags $ASFLAGS -o $object $source" exec_output
+ set exec_output [prune_warnings $exec_output]
+ if [string match "" $exec_output] then {
+ return 1
+ } else {
+ verbose -log "$exec_output"
+ 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 {[which $nm] == 0} then {
+ perror "$nm does not exist"
+ return 0
+ }
+
+ 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"
+
+ catch "exec $nm $NMFLAGS $nmflags $object >tmpdir/nm.out" exec_output
+ if {[info exists old_lc_all]} {
+ set env(LC_ALL) $old_lc_all
+ } else {
+ unset env(LC_ALL)
+ }
+ set exec_output [prune_warnings $exec_output]
+ 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
+ }
+}
+
+# True if the object format is known to be ELF.
+#
+proc is_elf_format {} {
+ if { ![istarget *-*-sysv4*] \
+ && ![istarget *-*-unixware*] \
+ && ![istarget *-*-elf*] \
+ && ![istarget *-*-eabi*] \
+ && ![istarget hppa*64*-*-hpux*] \
+ && ![istarget *-*-linux*] \
+ && ![istarget frv-*-uclinux*] \
+ && ![istarget *-*-irix5*] \
+ && ![istarget *-*-irix6*] \
+ && ![istarget *-*-netbsd*] \
+ && ![istarget *-*-solaris2*] } {
+ return 0
+ }
+
+ if { [istarget *-*-linux*aout*] \
+ || [istarget *-*-linux*oldld*] } {
+ 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
+ }
+ 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 *-*-*\[ab\]out*] \
+ || [istarget *-*-linux*oldld*] \
+ || [istarget *-*-msdos*] \
+ || [istarget arm-*-netbsd] \
+ || [istarget i?86-*-netbsd] \
+ || [istarget i?86-*-mach*] \
+ || [istarget i?86-*-vsta] \
+ || [istarget pdp11-*-*] \
+ || [istarget m68*-ericsson-ose] \
+ || [istarget m68k-hp-bsd*] \
+ || [istarget m68*-*-hpux*] \
+ || [istarget m68*-*-netbsd] \
+ || [istarget m68*-*-netbsd*4k*] \
+ || [istarget m68k-sony-*] \
+ || [istarget m68*-sun-sunos\[34\]*] \
+ || [istarget m68*-wrs-vxworks*] \
+ || [istarget ns32k-*-*] \
+ || [istarget sparc*-*-netbsd] \
+ || [istarget sparc-sun-sunos4*] \
+ || [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 *-*-mingw32*] \
+ && ![istarget *-*-cygwin*] \
+ && ![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.
+#
+# 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.
+#
+# 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.
+#
+# warning: REGEX
+# Expect a linker warning matching REGEX. It is an error to issue
+# both "error" and "warning".
+#
+# 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
+
+ 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(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 {}
+ 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
+ }
+ }
+ }
+ 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
+ }
+ }
+
+ 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"
+ 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]
+
+ if { $cmdret != 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"
+
+ # 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"
+
+ send_log "$cmd\n"
+ set cmdret [catch "exec $cmd" comp_output]
+ set comp_output [prune_warnings $comp_output]
+
+ if { $cmdret != 0 } then {
+ # If the executed program writes to stderr and stderr is not
+ # redirected, exec *always* returns failure, regardless of the
+ # program exit code. Thankfully, we can retrieve the true
+ # return status from a special variable. Redirection would
+ # cause a Tcl-specific message to be appended, and we'd rather
+ # not deal with that if we can help it.
+ global errorCode
+ if { [lindex $errorCode 0] == "NONE" } {
+ set cmdret 0
+ }
+ }
+
+ if { $cmdret == 0 && $run_objcopy } {
+ set infile $objfile
+ set objfile "tmpdir/dump1"
+
+ # 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 [catch "exec $cmd" comp_output]
+ append comp_output [prune_warnings $comp_output]
+
+ if { $cmdret != 0 } then {
+ global errorCode
+ if { [lindex $errorCode 0] == "NONE" } {
+ set cmdret 0
+ }
+ }
+ }
+
+ 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 { [regexp $expmsg $comp_output] \
+ && (($cmdret == 0) == ($opts(warning) != "")) } {
+ # 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 { [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"
+ 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"
+ fail $testname
+ return
+ }
+
+ verbose_eval {[file_contents $dumpfile]} 3
+ if { [regexp_diff $dumpfile "${file}.d"] } then {
+ fail $testname
+ 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
+
+ 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 "#..." $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"] {
+ 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
+ }
+
+ 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
+}
+
+# List contains test-items with 3 items followed by 2 lists, one item and
+# one optional item:
+# 0:name 1:ld 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).
+#
+proc run_ld_link_tests { ldtests } {
+ global ld
+ global as
+ global nm
+ global objdump
+ global READELF
+ global srcdir
+ global subdir
+ global env
+ global CC
+ global CFLAGS
+
+ foreach testitem $ldtests {
+ set testname [lindex $testitem 0]
+ 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
+
+# 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 ![ld_simple_link $ld $binfile "-L$srcdir/$subdir $ld_options $objfiles"] {
+ fail $testname
+ } else {
+ set 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
+ }
+ }
+}
+
+
+proc verbose_eval { expr { level 1 } } {
+ global verbose
+ if $verbose>$level then { eval verbose "$expr" $level }
+}
+
+# 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 one optional item:
+# 0:name
+# 1:ld options
+# 2:assembler options
+# 3:filenames of assembler files
+# 4:name of output file
+# 5:expected output
+# 6:compiler flags (optional)
+
+proc run_ld_link_exec_tests { targets_to_xfail ldtests } {
+ global ld
+ global as
+ global srcdir
+ global subdir
+ global env
+ global CC
+ global CFLAGS
+ global errcnt
+
+ 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 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.
+ 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 "-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
+ 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
+ }
+ }
+ }
+}